绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
【文】关于用户权限管控的方案设计
2020-06-19 07:42:32

MedusaSorcerer的博客


关于很多的 WEB 项目都有用户登录作为入口的, 所以在项目中拥有一个完善的用户权限管控的设计方式, 很重要, 特别是在一些安全平台上, 绝不给你越界的权限。
如一般的设计方式:

利用管理员的权限管理所有普通用户, 这种方式虽然可达到到权限管控的目的, 但是管控范围太过广泛, 细化是这次需要讲述到的, 明确每个管理者被分配的权限。

范围管辖式权限管控

不要纠结这个名字, 这个命名我也是灵光一闪命名的, 意思就是 利用划分不同范围, 管理人员可管理范围内的用户, 终管理者可管理所有范围内的用户, 范围内管理者不可逾越该范围而管理其他用户。 示意图如下:

在分配权限时, 权限受益者是用户, 例如:用户 A 分配的权限是管理员, 用户 A 所在的用户组:group-A, 那么用户 A 将可以管理所有在group-A的用户, 这种方式类似于部门经理管理部门内员工, 总经理管理所有部门一样, 当然你也需要注意, 在授权的时候明确授权者和被授权级别的关系, 如管理员不能授予用户系统管理员的权限。
人员架构图如下:

不同颜色之间相互独立。

分组授权权限管控

不得不说命名才是困难的, 这个意思是 根据权限表, 你可以自定义权限组, 将用户添加至组内, 用户将会享受组带来的权限支持。示意图如下:

在这种设计方案中, 收益的是用户组, 而终受益是用户组内的用户, 他们享受组所定义的权限。 那不同的设计就会有不同的方案, 主要的区别在于你怎么设计和规划你的权限枚举表, 如按照界面来分配, 按照功能块来分配, 或者其他。 我们简单的按照界面来分配, 这种方式就是我给你这个界面的权限, 你就可以使用这个界面上的所有功能, 具体不做详细赘述。
如你定义了一条权限数据, 数据内容是所有的权限都可以使用, 并命名为终管理员组, 此时你创建了一个用户 B, 并添加到了这个组内, 此时用户 B就是一个带有所有权限的用户, 针对不同工作性质, 不同级别, 你可以指定很多组, 并将指定用户添加进去。

再细化

那么再对上面的细化就是请求方法了, 当然, 我们不叫请求方法, 二十具体功能, 如同一个界面, 有查阅/更新/修改/删除等功能, 你可以根据这类具体的操作(功能), 再来细化你的权限管控, 但是在你设计模型的时候, 很可能会绕在里面出不来, 稍微有点小小的复杂, 后面有可能的话, 作者会实现一套 Django 模型, 也便于以后自己使用, 细化的目的是为了权限具体, 当然也要考虑实际情况, 如一些应用不需要这样复杂的管理方式, 就需要一个用户和管理者即可, 再有就是你对一个请求的用户, 进行权限校验的复杂程度, 也关系到项目的响应快慢, 效率问题, 所以细化不是越细化越好, 而是在需求上达到目的即可。



码字不易, 点个赞吧~
今天你进步了吗?

分享好友

分享这个小栈给你的朋友们,一起进步吧。

MedusaSorcerer
创建时间:2020-06-29 16:36:50
学无止境, 学无止尽。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • zuike2000
    栈主
戳我,来吐槽~