第三章 搭建一个通用的权限管理系统

项目目标部署环境: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

posted @ 2018-04-23 12:32  提伯斯  阅读(3435)  评论(2编辑  收藏  举报