# RBAC模型 (Role-Based Access Control) RBAC 是一种较新且广为使用的访问控制机制。其不同于“强制访问控制”以及“自由选定访问控制”直接赋予使用者权限,而是将权限赋予角色。 基本概念 * 用户(user): 通常指人(广义的概念),还包括机器人、计算机、集群等 * 角色(role): 一定数量的权限的集合,权限的载体,如: 公司的工作职位,网上论坛的版主 * 权限(permission): 对一个或多个客体的访问或操作,如: 对功能模块的操作,对上传文件的删改,甚至页面上菜单、某个按钮的可见性控制等 需求分析 * 支持角色、权限、资源的增删改查 * 支持单个用户与角色绑定 * 支持用户组与角色绑定 * 支持单个权限与角色绑定 * 支持权限组与角色绑定 * 不同职责的员工和不同类型的用户,对资源有不同的操作权限 * 具有良好的扩展性,满足各种规模的公司架构和用户量级 * 数据库 ER 图 * 用户相关表(绿色): user, user_group * 角色表(紫色): role * 权限相关表(棕色): permission, operation, resource, permission_group * 中间表(灰色): user_role, user_group_user, user_group_role, permission_role, permission_group_role, permission_group_permission  权限验证 * 用户有权访问或操作资源: {{用户包含的所有角色} ∪ {用户所属组包含的所有角色}} ∩ {{权限对应的所有角色} U {权限所属组对应的所有角色}} ≠ {空集} 注意事项 * 角色、权限和资源的划分 * 角色权限映射关系 * 当用户数量非常多时,可以考虑引入用户组,简化用户授权的复杂性 * 当系统权限非常复杂时,可以考虑引入权限组,简化角色的权限分配 流程图  1. 人员属于某个角色,首先给他分配角色,例如:总监、经理、主管、助理等; 2. 人员赋予角色后,则给他分配权限,不同的角色,规定有不同的权限。比如:总监级别,能够增删改查,无所不能;而经理级别,只能增改查,如果需要删除,则需要总监审批;主管只有增加和查看,修改需要向经理申请,让经理审批。 3. 不同的权限,实际上是对应数据库中的某张表,也就是Django中的某个model。 实现过程  1. 人员登录后,先验证用户是否OK; 2. 验证用户OK后,则根据人员属于什么角色,进行权限获取,并写入session中; 3. 用户登录成功,进入index页面,则根据用户session中的权限,展示不同的页面,正所谓:千人千面; 4. 用户根据不同的页面,进行不同的操作。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up