功能说明

权限实现的功能如下:

  • 实现上级部门查看下级部门的数据级联
  • 实现用户自定义部门权限,例如张三可以查看部门A,B,C三个部门的数据,虽然张三不是部门主管
  • 实现不通菜单下不通的部门权限,例如张三在用户管理可以查看8个部门,在审批管理可以查看9个部门
  • 实现人员查看任意人员的权限功能,例如张三要查看李四的数据.

表结构设计逻辑

如果是部门主管,是通过人员部门中间表(t_user_org)managerType=2字段作为判断依据,根据t_org的pid形成树形结构,实现部门层级权限.

依据角色(t_role)为中心,角色关联菜单(t_menu),分配角色可以查看的菜单.角色关联人员(t_user),分配人员的角色,这样实现人员到菜单的权限.

角色(t_role)关联部门(t_org),实现角色关联的部门列表(t_role_org),角色(t_role)中roleOrgType字段标识角色关联部门的类型,值可以是:0自己的数据,1所在部门,2所在部门及子部门数据,3.自定义部门数据,4全部权限

根据角色就可以获取到对应的部门列表了,多个角色取合并集合,就能获取当前用户能够看到的所有部门数据,至此实现自定义用户的部门级权限

如果要看指定人员的数据,给当前用户创建一个虚拟部门,把当前用户设置成部门主管,然后把被查看人拉到虚拟部门.

不同菜单下,数据权限不同

每个菜单的url地址必须是唯一的,因为前后端分离,所以前端的菜单的显示不受后台控制,如果菜单地址需要重复出现,让前端做下处理,后端数据库里,菜单地址是唯一的.

角色(t_role)指定 privateOrg 角色的部门是否私有,0否,1是,默认0.当角色私有时,菜单只使用此角色的部门权限,不再扩散到全局角色权限,用于处理不同菜单不同的数据权限.公共权限时部门主管有所管理部门的数据全权限,无论角色是否分配.私有部门权限时,严格按照配置的数据执行,部门主管可能没有部门权限.私有权限和公共权限分别处理,不能交叉.处理公共权限时会跳过私有权限

后台根据请求地址就可以反向查询到菜单ID,根据菜单ID,查找到菜单ID所属的用户角色,优先处理私有角色,根据获取的到的角色ID查询到关联的部门数据.就此实现不同菜单下,不同的部门权限.