数据关系n:n到1:1优化

本文介绍了将传统的基于角色的访问控制(RBAC)中的n:n关系优化为1:1关系的策略,通过权限编码和解码算法减少数据库查询压力,提高系统效率。同时,阐述了优化后的优点和潜在缺点。
摘要由CSDN通过智能技术生成

案例背景:
目前较为常见的用户权限鉴权模型:基于角色的访问控制RBAC(Role-Based Access Control)
RBAC介绍:
涉及程序的权限管理时,大家往往想到角色这一概念。角色是代表一系列可执行的操作或责任的实体,用于限定你在软件系统中能做什么、不能做什么。用户帐号往往与角色相关联,因此,一个用户在软件系统中能做什么取决于与之关联的各个角色。
例如,一个用户以关联了”管理员”角色的帐号登录系统,那这个用户就可以做项目管理员能做的所有事情哦,管理员可以做啥,整个用户就可以得到所有的权限。
RBAC隐式角色:
直接通过角色来验证用户有没有操作权限,如下代码示例:

if (user.hasRole("role1") ) {
   
    //show the button
} else {
   
    //don't show the button
}

如上某个接口或者功能只给role1使用,如果没有这个权限则其他处理方式。假如需求发生变更,role2 角色也可以使用,那么就需要调整代码。

if (user.hasRole("role1")|| user.hasRole("role2") ) {
   
    //show the button
} else {
   
    //don't show the button
}

程序扩展性很差,相当于代码写死,未来调整需求,成本加大,且容易出现遗漏测试的风险。
RBAC新解:Resource-Based Access Control
在程序中通过权限控制谁能访问某个资源,角色聚合一组权限集合;这样假设哪个角色不能访问某个资源,只需要从角色代表的权限集合中移除即可;无须修改多处代码;即粒度是以资源/实例为单位的;粒度较细。只要把明确的资源定义下面,这样就是一个资源操作的集合,把资源给某个角色就好,这样这个角色就拥有了访问的权限。

if (user.isPermitted("permit:view:a")) {
   
    //show the button
} else {
   
    //don't show the button
}

如果用户被明确的知道控制访问的是什么接口或者功能,把资源权限挂靠到角色下面,如果该角

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值