一般一个用户都有个默认的岗位,例如我是项目经理,那项目经理应该
有啥权限等。我们设计时考虑到了复杂情况,一般会设计为一对多关系,
但是日常生活中,大部分情况下,导入导出数据时,都希望获得一个单
一的关系,例如这个人默认的角色是啥?当然为了满足复杂情况,还有
一对多的的关系。所以我们设计权限时,一般在用户表里加一个默认角
色字段。

 

虽然RBAC里,不对用户直接赋予权限,但是我们国内的小公司,特别是

7-8个人的小公司用的软件,基本上都是没严格的岗位之分,领导也只
是很明确的指出,到底谁有什么权限,哪个人可以干啥啥等,一般也急
急忙忙,直接给用户设置权限就可以了,这虽然是错误的做法,但是很
符合国情,不这么做吧,软件还的确有些不好用。我们大部分人开发的
都是底端的小型管理类软件,所以,一般是该用户有什么权限是首先进
行判断的,这样程序的运行效率也会高一些。

接着是传统的,这个用户属于哪几个角色,这些角色是否有相应的权限,

这是符合RBAC的体系,也能适应大型管理类软件的权限设计惯例。

我的权限判断顺序为:

1. 该用户是否有效的?是否已经被锁定了?

2. 该用户是否为 Administrator 特殊用户?
3. 该用户是否在 Administrators 特殊角色里?
4. 此判断权限项是否有效?
5. 该用户的用户权限关系是否有效?该用户是否有这个权限?
6. 角色是否有效?
7. 角色拥有的权限是否有效?
8. 该用户是否在有效的角色里?

当然以上的判断会封装在一个函数里,判断函数越早结束越好,当然不

是非要把这个7个步骤都判断完,那函数的运行效率太差了。

为什么这里都判断个有效呢?

主要是为了采用用户主动可以申请权限的做法,例如权限都管理员配置,
那也是很琐碎的工作,用户自己可以申请拥有哪些权限,这些权限申请
被递交上来后,相应的管理员进行审核,审核通过后所申请的权限就生
效了,当然也可以帮别人申请权限,那就灵活性更强了。

直接删除数据与是否有效的差别为:

例如一个人以前过过某个权限,现在暂时没有这个权限了,你直接删除

了,虽然省事了,但是数据没有了,过了段时间想恢复权限时,还需要
加上去,这时我的做法时,不是非要删除的数据吧,别非得删除,能打
个有效无效的标志就可以了。不知道我这个想法是否正确,若不正确,
请指点批评。
 

导读:

大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(一)后台控制逻辑代码部分

大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(二)后台服务代码部分

大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(三)商业逻辑代码部分

大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(四)高效的后台权限判断处理

 

 

 

将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。