项目开发之权限管理系统原理篇
项目开发中,基础模块必不可少一块便是权限的管理,关于权限管理也有很多成熟的开源框架,本文主要总结学习权限设计的思想。
一、什么是权限
权限,通俗的讲就是某人能不能进行某个操作,或者访问某些资源。或者是说,什么人可以或不可以做什么事。有时候在跟客户交流的时候,往往客户理解的和你想表达的是不一样的,或许程序员的思路总是独特的吧。
简单点一句话说下:Who(权限的拥有者或主体)对What/Which(权限针对的对象或资源)进行How(权限针对的对象或资源)操作。
那么在什么情况下我们需要进行权限管理呢,如果一个系统所有功能对所有人都开放,那么就没有必要做权限管理。然而,当我们的系统部分功能通用而另外一部分只对部分人开放时,就需要进行权限控制。
通常的权限管理系统一般是由用户管理、角色管理和权限管理组成。这也是一个管理系统必备的最基础的模块。下面将从这三个基本要素讲起。
二、用户管理
用户是应用系统的具体操作者,即使用系统的人,根据不同的系统可以有不同的字段,如:用户名,姓名,工号,登录密码等。而用户管理就是用户注册、用户信息管理等功能。
一般在做用户账号管理时,我们通常分为企业(管理员)账号、普通账号,企业帐号不可删除、离职。
用户帐号禁用:多次输入密码错误,系统会因帐号安全问题暂时把禁用掉。或涉及到帐号被盗等场景需立马禁用,修改密码等操作。
用户帐号停用:员工离职,但是在职时所有的操作记录信息还存在,所以设置为停用。
可以通过账号状态管理(待激活、正常、禁用、停用等)。禁用、停用的就无法登录。
三、角色管理
角色本质就是一个分组,对许多拥有相似权限的用户进行分组管理。位于同一个角色下的用户具有相同的权限。角色管理主要是角色的增删改查以及角色下的用户管理。
角色的引入使我们更加灵活的去配置权限,而不需要一个一个用户分配权限。只需要为角色赋予权限,能够大大减轻管理负担,同时将用户与权限解耦,提供更大的灵活性。
四、权限管理
在这个系统中,我们需要对系统的所有资源进行权限控制,那么系统中的资源包括哪些呢。我们可以把这些资源简单概括为静态资源(功能操作、数据列)和动态资源(数据),也分别称为对象资源和数据资源。
权限管理系统并不是越复杂越好,符合客户实际需求并具备最大弹性的权限系统才是最好的。
由于随着公司扩大角色的增多,试想如果用户量上万,新增一个角色时,可能需要为大量用户都分配一遍新的角色,工程量仍然巨大,此时即可以引入用户组的概念:如果部分用户的使用场景是相对一致和基础的,我们可以把这些用户打包成一个组,基于这个组的对象进行角色和权限的赋予。
同理如果权限较多时也会存在一样的问题,处理方式是引入权限组的概念,将使用场景相对固定的一组功能或权限打包成组赋予角色。但是一般来讲一个系统中权限功能的体量是相对有限和可控的,所以实际应用中对权限组的使用较少。
基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观情况。