一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情。
认证之后,最重要的就是个权限系统,对权限进行管理。
说到权限系统,首先我们需要考虑的是权限模型,合理的权限模型能用最小的代码保护数据的安全
权限系统的核心,是权限模型。选择了合理的权限模型,才能设计出一个符合要求的权限系统。
权限模型的关键点,是用户,操作和资源。比如,用户对文件进行删除操作。常见的权限模型有以下五种:
- 权限控制列表,ACL 顾名思义,就是一个表,表里的内容描述了谁可以对什么资源做什么操作。这也是一种非常简单的模型。比较适合一些简单的场景
- 自主访问控制,DAC DAC 是 ACL 的扩展模型,灵活性更强。可以用户权限的主体,可以将相同的权限赋予其他人。DAC 模型将权限下放,但是它对权限的控制就很分散了,需要根据场景使用。
- 强制访问控制,MAC 也是 ACL 的扩展,安全性更高,灵活性更低。它的主要特点是主体和资源都被赋予一定的访问策略,主体对客体的操作需要同时满足主体及客体的安全属性,这个安全策略是系统管理员定的,无法更改。
- 基于角色的访问控制,RBAC 引入角色概念,将权限与角色关联,用户是什么角色,就有什么权限。
- 基于属性的权限验证,ABAC 这个就比较灵活了,规定了哪些属性的用户可以对哪些属性的资源在哪些限定条件进行哪些操作。有以下四类属性:
- 用户属性
- 资源属性
- 操作属性
- 环境属性
如果想了解 RBAC 的实现,可以参考下开源项目,如 casbin 等等。