javaoauth2登录以及权限_【系统架构】让多系统共⽤⼀套权陶瓷耳环
前⾔
权限管理是⼏乎所有管理后台的通⽤功能,虽然,不同的系统有不同的个性要求,但从总体来看,权限管理通常包含管理员管理、⾓⾊管理、节点管理、菜单管理等⼏部分,涉及管理员表、⾓⾊表、节点表、⽤户⾓⾊表、⾓⾊节点表、菜单表等⼏张表。
权限管理实现起来并不难,很多框架都有其⾃⼰的实现类库。如,PHP中的Laravel框架、ThinkPHP框架等。
不过,由于不同的框架,其⽬录结构及编码规则不⼀样,多数情况下,若你想将⼀个系统中的权限管理模块移植到另⼀个系统中你是需要重新编码的。这样就造成了很多不必要的重复性劳动。
无纺布储物箱那如何解决这个问题呢?答:将权限管理系统独⽴起来,多业务共⽤同⼀套权限管理系统。 优点
多业务共⽤同⼀套权限管理系统的好处是不⾔⽽喻的。
⾸先,不受业务限制。由于这样的权限管理系统是独⽴于业务部署的,不需要嵌套在业务代码中,所以,不管业务使⽤什么编程语⾔,什么框架,我们都不需要特地去适应它。我们要做的就是让业务按照统⼀的接⼊规则接⼊即可。
其次,⽅便维护。由于所有的业务共⽤⼀套权限管理系统,所以,你只要维护好这个公共的权限管理系统,基本上就能保证权限管理系统的正常使⽤。
最后,易于扩展。由于这样的权限管理系统使⽤统⼀的接⼊规则,所以,业务只要按照接⼊规则接⼊,就可以⽴马使⽤权限管理系统。
原理
如下是多业务共⽤⼀套权限管理系统的原理图。
从图中可以看出,多个业务要接⼊同⼀套权限管理系统⼤概需要进⾏如下⼏步操作:
1、要接⼊权限管理系统的业务,需要在权限管理系统注册并获取唯⼀标⽰。
2、业务系统要在权限管理系统为本业务配置不同的⾓⾊、权限及它们的关联关系。如下图所⽰:
3、业务系统要将登录接⼊权限管理系统,即当⽤户点击业务系统的登录时,业务系统需要将⽤户导到权限管理系统的登录界⾯,让⽤户在权限管理系统这边登录。
4、当⽤户在权限管理系统登录成功后,业务系统要利⽤权限管理系统返回的信息获取当前⽤户的⾓⾊信息、权限信息以及可以访问的菜单信息,并将它们缓存在业务系统。
5、业务系统利⽤其缓存的⾓⾊信息、权限信息和菜单信息进⾏菜单的展⽰和权限的控制。
实现
下⾯以RBAC模型为例介绍下权限管理系统的实现⽅法。
数据库设计
佳迪达化工要实现此权限管理系统,我们需要先创建如下⼏个数据表:
1、业务系统表
此表记录各个要接⼊的业务系统,包含业务名称和业务标⽰。如下:
字段说明:id —> 业务系统idcode —> 业务系统标识name —> 业务系统名称抗衡阀
胸片数据库
2、菜单表
此表记录每个业务所要显⽰的菜单,包括菜单名称、关联的URL等。如下:
字段说明:id —> 主键,⾃增标识pid —> 菜单⽗级Idname —> 菜单名称url —> 菜单对应urlbusiness_code —> 业务系统标识created_at —> 创建时间updated_at —> 更新时间status —> 状态
3、⽤户表
此表记录所有的使⽤⽤户,包括它们所属的业务、账号和密码等,如下:
字段说明:id —> 主键,⾃增标识nickname —> 昵称username —> ⽤户登录名称password —> ⽤户登录密码created_at —> 创建时间updated_at —> 更新时间status —> 状态
4、⾓⾊表
此表记录所有的⾓⾊信息,包括⾓⾊名称、⾓⾊ID等。如下:
字段说明:id —> 主键,⾃增标识name —> ⾓⾊名称business_code —> 业务系统标识created_at —> 创建时间updated_at —>更新时间status —> 状态
5、权限表
此表记录所有的权限信息,包括权限名称和关联的路由等。如下:
字段说明:id —> 主键,⾃增标识name —> 权限名称route —> 路由地址business_code —> 业务系统代码created_at —> 创建时间updated_at —> 更新时间status —> 状态披肩按摩器
6、⽤户⾓⾊表
此表记录⽤户和⾓⾊的关系,包括⽤户id和⾓⾊id等。如下:
字段说明:ID —> 主键,⾃增标识UserId —> ⽤户IDRoleId —> ⾓⾊IDSystemCode —> 系统标识代码
7、⾓⾊权限表:
此表记录⾓⾊和权限的关系,包括⾓⾊id和权限id等。如下:
字段说明:id —> 主键,⾃增标识role_id —> ⾓⾊IDuser_id —> 权限IDbusiness_code —> 业务系统标识
8、操作⽇志表
此表记录⽤户的操作动作,如新增、更新、删除等。
字段说明:id —> 主键,⾃增标识user_id —> 操作⽤户operate_type —> 操作类型remark —> 操作说明business_code —> 业务系统标识created_at —> 创建时间updated_at —> 更新时间status —> 状态
代码实现
在代码实现部分,我们可以将整个流程分为两步。第⼀步是权限管理系统本⾝的维护,第⼆步是业务系统的对接。