项目目标部署环境:CentOS 7+mysql
项目技术点:.netcore2.0 + Autofac +webAPI + NHibernate5.1 + mysql5.6 + nginxnginx
开源地址:https://github.com/wmowm/nh.coregit
哈哈,这章其实跟.net core没多大关系,为了后面方便讲解.net core,咱们就以这个功能做为切入点,这个功能点也是许多小伙伴期待的内容github
权限,通俗的讲,就是系统断定某个用户是否能执行某个操做web
咱们先模拟一个业务场景:某上市公司,在多个区域控股多个集团,每一个集团下又有多个子公司sql
分析1.这公司好大啊,至少也有千把号人吧,数据加载问题数据库
分析2.职位确定不少,并且会出现重合,好比子公司A与子公司B,它们的组织结构可能80%是相同的ui
分析3.单一职责,某个角色,在某个领域下,它只具有某些职能,否则后期就会混乱,处处跨职能.net
分析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