通用权限控制系统设计
创建时间 datetime
更新时间 datetime
应用员工表
app用户id bigint(20) <ak1>
用户id bigint(20) <fk1>
应用id varchar(32) <fk2>
注册时间 datetime
备注
varchar(55)
BI时间戳 timestamp
角色id bigint(20) <pk,fk2> 菜单id bigint(20) <pk,fk1>
员工操作日志
id
bigint(20) <pk>
操作类型 varchar(10)
app应用id varchar(32)
系统名称 varchar(25)
描述
varchar(50)
对象信息 text
操作时间 datetime
操作人id bigint(20) <fk>
操作人姓名 varchar(64)
操作人IP varchar(64)
创建时间
datetime
更新时间
datetime
BI时间戳
timestamp
父级id 状态0启用1禁用 部门经理id 备注 版本号 排序 关键字 删除标记(0正常1删除) 建立者id 创建时间
bigint(20) tinyint(1) bigint(20) varchar(255) int int(10) varchar(255) tinyint(1) bigint(20) datetime
员工信息表
id
bigint(20)
员工账号
varchar(55)
员工密码
varchar(64)
成员名称
varchar(55)
工号
varchar(22)
性别[0男1女3保密]
tinyint(1)
手机号
varchar(255)
头像url
varchar(255)
邮箱
varchar(64)
员工类型0管理员1普通员工 tinyint(1)
权限控制模块
成都恒信博达科技公司
吴小刚 201806
权限模块-权限逻辑
鉴权管理,即权限判断逻辑 最基本的权限管理就是菜单管理,用户没有权限的功能模块在菜单节点上是不显示的。
示例:普通业务人员登录系统后,是看不到【用户管理】菜单的。 功能权限管理,采用权限匹配符方式(授权码),可以做到方法级与业务代码逻辑权限控制
is_super
组织拥有角色
备注 排序 版本号 关键字 是否删除 创建时间 更新时间
员工所属组织
员工id
bigint(20) <pk,fk2>
组织id
bigint(20) <pk,fk1>
is_default tinyint(4)
组织id bigint(20) <pk,fk1> 角色id bigint(20) <pk,fk2> 建立者id bigint(20) 创建时间 datetime
普通用户(只能有更高级权限创建)
更高级管理员创建,分功能权限与数据权限
权限模块-登录流程
权限模块-登录流程
不同类型用户 登录流程:
账户登录
员工
管理员
根据应用权限,加 载SSO权限数据
加载管理系统 权限
进入业务子系统 进入管理系统
例: 需区分数据权限,如只加载所拥有组织的权限,也只能修改所拥 有的数据权限.
权限模块-登录认证
登录认证
客户端
login controller
认证服务
POST 用户名/密码(MD5)
用户验证 获取用户信息 返回用户信息
获取 角色/权限
返回 角色/权限
用户服务
返回用户权限+ 认证token
生成jwt签名数据 返回jwt签名
jwt util
权限模块-请求认证
请求认证
客户端
JwtInterceptor
3. 权限的定义 权限可以分为三种:页面权限,操作权限,数据权限。 页面权限 控制你可以看到哪个页面,看不到哪个页面。 很多系统都只做到了控制页面这一层级,它实现起来比较简单,一些系统会这样设计,但是比较古板,控制的权限不精细,难以在页面上对权限进行更下一层级的划分。 操作权限 则控制你可以在页面上操作哪些按妞。 延伸:当我们进入一个页面,我们的目的无非是在这个页面上进行增删改查,那在页面上对应的操作可能是:查询,删除,编辑,新增四个按钮。 可能你在某个页面上,只能查询数据,而不能修改数据。 数据权限 数据权限则是控制你可以看到哪些数据,比如市场A部的人只能看到或者修改A部创建的数据,他看不到或者不能修改B部的数据。 延伸:数据的控制我们一般通过部门去实现,每条记录都有一个创建人,而每一个创建人都属于某个部门,因此部门分的越细,数据的控制层级也就越精细
权限匹配符
varchar(50)
父级id
varchar(32)
备注
varchar(255)
排序
int(10)
版本号
int
关键字
varchar(255)
是否删除
tinyint(1)
建立者id
bigint(20)
创建时间
datetime
更新时间
datetime
禁止删除(0否1是) tinyint(1)
应用id
注解 权限匹配符验证
返回资源
服务回馈
服务端-权限验证
浏览器
API网关
服务注册中心
hsd-account-staff-web-boss hsd-account-staff-server
hsd-framework-web-restful
hsd-account-staff-biz
hsd-framework-core
员工登录日志
id 员工id 员工名称 类型0登录1登出 IP地址 MAC地址 创建时间 app用户id app应用id 系统名称
bigint(20) bigint(20) varchar(32) tinyint(1) varchar(64) varchar(32) datetime bigint(20) varchar(32) varchar(255)
建立者id bigint(20)
组织架构
创建时间 datetime
id
bigint(20)
编码
varchar(32)
类型0企业1部门2组 tinyint(1)
名称
varchar(100)
员工拥有角色表
员工id bigint(20) <pk,fk1> 角色id bigint(20) <pk,fk2> 建立者id bigint(20) 创建时间 datetime
权限模块-权限逻辑图
权限模块-分级授权
权限层级: 顶级管理员(系统默认创建,默认拥有最大权限)
系统自动创建
超级管理员(只能有更高级权限创建)
顶级管理员创建,拥有所有权限.但不能维护高级别与本级别 管理员
应用管理员(只能有更高级权限创建)
更高级管理员创建,拥有应用与组织权限.不能维护高级别与 本级别管理员
最后登录日期
datetime
登录次数
int
状态0启用1禁用
tinyint(1)
生效时间
date
失效时间
date
员工级别0普通员工
varchar(36)
上级领导
bigint(20)
备注
varchar(255)
版本号
int
排序
int(10)
删除标记(0正常1删除)
tinyint(1)
建立者id
bigint(20)
get/post requestHeader Authorization
根据注解头判断是否需要登录授权
注解 权限匹配符Leabharlann 证访问资源受保护资源
解析jwt token token claims data 用户/角色/权限匹配符
访问服务
基础服务
jwt util
验证(ext,nbf,aud等)
解析jwt token token claims data
权限_角色vs菜单
APP应用表 (系统参数)
AppId varchar(22) <pk>
系统名称 varchar(50)
主页登链 varchar(255)
登录链接 varchar(255)
登录类型 varchar(20)
备注
varchar(255)
删除标记 tinyint(1)
建立者id bigint(20)
a.超级管理员:由顶级管理员账号创建,拥有所有权限。但不能维护高级别及本级别管理员 b.应该管理员:由更高级管理员创建。不能维护高级别及本级别管理员 c.普通用户:由更高级管理员创建,不可登录管理系统维护资料
权限模块-物理数据模型
权限_功能(授权码)
权限id
varchar(32)
权限名称
varchar(50)
灵活的授权管理,即权限分配过程。通过系统的授权功能来分配给具体的用户。
1.对用户所属角色授权,用户所属角色信息可以看作是一个权限分组,每个用户可以关联多个角色。 2.角色直接关联具体的功能权限(授权码),也可以关联负权限,即此角色关联的权限不能使用负权限功能。负权限具有优先级别。 3.直接对用户分配角色。 4. 对用户所属组织分配角色。 5. 分级授权
系统_菜单
建立者id bigint(20)
id
bigint(20) <pk>