zoukankan      html  css  js  c++  java
  • 第三章 搭建一个通用的权限管理系统

    项目目标部署环境:CentOS 7+

    项目技术点:.netcore2.0 + Autofac +webAPI + NHibernate5.1 + mysql5.6 + nginx

     开源地址:https://github.com/wmowm/nh.core

    哈哈,这章其实跟.net core没多大关系,为了后面方便讲解.net core,我们就以这个功能作为切入点,这个功能点也是许多小伙伴期待的内容

    权限,通俗的讲,就是系统判定某个用户是否能执行某个操作

    我们先模拟一个业务场景:某上市公司,在多个区域控股多个集团,每个集团下又有多个子公司

    分析1.这公司好大啊,至少也有千把号人吧,数据加载问题

    分析2.职位肯定很多,而且会出现重合,比如子公司A与子公司B,它们的组织结构可能80%是相同的

    分析3.单一职责,某个角色,在某个领域下,它只具备某些职能,不然后期就会混乱,到处跨职能

    分析4.OOP思想,彼此之间解耦,因为这些操作可能是多人协作的,不可能卡在某个功能点一直等待

    分析N.后面就靠园友补充了

    这里引用几个基础表,我这里画了原形图,根据原型图进行说明

    用户表

    录入用户基础信息,每个用户都是一个独立的对象

    菜单表

    创建一个菜单,权限组是一个配置文件,里面是所有的权限,我们根据菜单勾选它拥有哪些权限即可

    角色表

    创建一个角色,勾选菜单权限组的一些权限,这里的列表可以做的不用这么复杂,可以单独加一个查看按钮,查看某个角色的所有权限

    组织机构表

     

    这里也比较好理解,就是CRUD一个treeview,我们现在还没有职位,所以就不进行职位的操作

    职位表

    这里CRUD职位表,当职位表有数据时,在组织机构表,可以挂载这些职位

    前面介绍的这些表,都是可以独立进行操作的,而且操作也非常简单,我们现在需要把它们关联起来,这里我会结合数据库结构进行讲解

    1.组织机构 挂载/移除  职位

    这里我们引入一张关系表,机构职位表(OrganizatioPosition)

     id    oid    pid

    主键     机构id     职位id

    1     1     1

    2     1       2

    3     2     1

    4     2     2

    ------------------------------------------------------------------------------------

    它们的关系  oid  一对一   pid

    注意点1.挂载的时候,判断职位是否存在

    2.用户授权

    展开组织机构,点击职位,会显示两个table,一个用户跟角色,我们在这里为用户授权角色

    根据oid 与 pid 可以查询到opid

    这里我们引入一张关系表,职位用户角色表(PositionUserRole)

     id    opid    uid    rid

    主键      机构职位id  用户id    角色id

    1     1     1,2,3,4  1,2,3,4

    2     2        5,6          1,2,3,4

    3     3          11,111   1,2

    ------------------------------------------------------------------------------------

    opid 与 uid  一对多

    opid 与 rid  一对多

    uid  与  rid  多对多

    这里小伙伴可能要问到关于查询的问题,比如想知道 uid=1 拥有哪些角色

    用模糊查询 uid like '1,' 或者 uid like ',1,' 这些比较通俗的手法实现

    因为我ORM用的是NHibernate,所以查询不用顾虑这些问题,我填充查询器是这样的

    in (对象1,对象2)

    注意点1.一个用户只能拥有一个职位,如果该职位具有跨部门权限,可以给这个职位添加对应的角色

    我们模拟一下登录过程

    用户登录     -->      获取用户对象    -->  查询PositionUserRole表,[获取到多个角色,获取到opid]    -->       根据opid可以获取到用户的组织机构信息与职位信息

    觉得对你有帮助的,可以去给我开源项目点个星星

    开源地址:https://github.com/wmowm/nh.core

  • 相关阅读:
    kubernetes安装
    kubernetes介绍
    Nginx——stream模块
    Nginx——文件路径配置
    Nginx——HTTP核心模块
    Nginx优化性能配置项
    Nginx----运行的配置项
    四十六、进程间通信——管道的分类与读写
    四十五、进程间通信——介绍
    四十四、Linux 线程——线程同步之死锁以及线程和信号
  • 原文地址:https://www.cnblogs.com/tibos/p/8917377.html
Copyright © 2011-2022 走看看