权限管理设计思路
最近公司的运营管理系统开发完毕,有时间来写点东西,就先来总结一下我再权限系统的设计思路吧,希望能有点用。
权限管理分为 功能权限以及数据权限。
功能权限
功能权限是指某个用户使用某个功能的权限 ,简单的说就是调用某个接口的权限。
功能权限比较简单,主要要有三个实体:
用户:保存用户信息
角色:用户的角色信息
权限:权限信息
通过 用户绑定角色,角色绑定权限来实现对用户权限的控制,他们之间都是多对多的关系。
数据权限
数据权限就是指不同的用户,使用同样的接口得到数据数量,数据维度不同,所以数据权限又分为行级权限以及列级权限。
数据权限-行级权限
行级权限可能会涉及到层级关系,比如销售数据: 普通员工能只能看自己的销售数据
销售组长能看这个组及自己的,部门领导能看所有的。还会有跨部门的权限情况:比如财务部的任何一个人都能看销售部所有的数据。
行级数据权限表设计(主要字段):
字段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:列名 逗号分隔
实现
-
再用户登陆的时候 将这个用户信息,权限信息,根据以上结构查出来,放到缓存里(redis)
-
功能权限的实现都在过滤器(filter)里面,有相应的权限才放行。
-
数据权限就是在各个数据接口中,根据每个用户的配置的数据权限动态生成sql ,select 中的值是列级权限的配置,where 条件中加上 行级权限的相关配置。
本文由博客群发一文多发等运营工具平台 OpenWrite 发布