什么是ACL

以前非常盛行的一种权限设计,它的核心主要在于用户和权限直接挂钩。

它的原理非常的简单,每一项资源,都配有一个列表,这个列表记录的就是哪些用户可以对这项资源执行CRUD中的那些操作。当系统试图访问这项资源时,会首先检查这个列表中是否有关于当前用户的访问权限,从而确定当前用户可否执行相应的操作。总得来说,ACL是一种面向资源的访问控制模型,它的机制是围绕“资源”展开的。

它的优点是:简单易用,开发便捷

但同样,它的缺点也很明显,用户和权限直接挂钩,导致在授予权限时的复杂性,比较分散,不便于管理

使用场景:

  • 比较小的用户管理系统
  • 常见的文件系统权限设计,直接给用户加权限

什么是RBAC

RBAC是基于角色的访问控制系统,权限和角色相联系,用户通过成为某个角色而获取该角色拥有的权限

它的原理就是将用户按照角色进行归类,通过用户的角色来确定用户有没有对某项资源访问的权限

这样做的好处是,简化了用户与权限的管理,在一定程度上简化了授予时的复杂度,易扩展 易于维护

缺点:开发对比于ACL相对复杂,而且,比较僵硬,如果要修改某个用户所拥有的权限,只能修改它的角色,这样,如果有不想让他拥有的权限,RBAC就显得很僵硬。

使用场景:

  • 数据量比较庞大时授予权限
  • 比较明确的角色分明时

小结

如果要写一个用户管理系统,数据表之间的关联关系适当的添加关联关系甚至可以不添加那些看起来关联住的表,这样,查询时,完全可以通过多表联查来实现某些目的,不仅会使维护变得简单许多,还会将这个框给划开,而不是牵一发而动全身。

左:ACL 右:RBAC

无论是ACL还是RBAC,都不能过于复杂,规则过多,否则,维护性和性能会下降