权限管理设计思路

最近公司的运营管理系统开发完毕,有时间来写点东西,就先来总结一下我再权限系统的设计思路吧,希望能有点用。

权限管理分为 功能权限以及数据权限。

功能权限

功能权限是指某个用户使用某个功能的权限 ,简单的说就是调用某个接口的权限。

功能权限比较简单,主要要有三个实体:

用户:保存用户信息

角色:用户的角色信息

权限:权限信息

通过 用户绑定角色,角色绑定权限来实现对用户权限的控制,他们之间都是多对多的关系。

数据权限

数据权限就是指不同的用户,使用同样的接口得到数据数量,数据维度不同,所以数据权限又分为行级权限以及列级权限。

数据权限-行级权限

行级权限可能会涉及到层级关系,比如销售数据: 普通员工能只能看自己的销售数据

销售组长能看这个组及自己的,部门领导能看所有的。还会有跨部门的权限情况:比如财务部的任何一个人都能看销售部所有的数据。

行级数据权限表设计(主要字段):

字段1: source_type:需要配置权限的类型(角色或者部门)

字段2: source_id:角色id 或者部门id

字段3: target_type:source 能访问的目标数据的 类型(角色或者部门)

字段3: target_id:角色id或者部门id

这样一条数据的意思是,source角色或者部门下的人员能够访问target角色或者部门下人员的所有数据。

数据权限-列级权限

列级数据权限表设计(主要字段):

字段1: source_type:需要配置权限的类型(角色或者部门)

字段2: source_id:角色id 或者部门id

字段3: target_type:source 能访问的目标数据的 类型(客户列表)

字段3: target_colums:列名 逗号分隔

实现

  1. 再用户登陆的时候 将这个用户信息,权限信息,根据以上结构查出来,放到缓存里(redis)

  2. 功能权限的实现都在过滤器(filter)里面,有相应的权限才放行。

  3. 数据权限就是在各个数据接口中,根据每个用户的配置的数据权限动态生成sql ,select 中的值是列级权限的配置,where 条件中加上 行级权限的相关配置。