ACL:以资源为主
RBAC:以角色为主
RBAC和ACL的差别不是很大。RBAC多了一个Role。你给ACL加上Role,就和RBAC差不多。
我尽量用相同的table name比较他们的 DB Schema。
RBAC:
(1) user, role, permission, user-role, role-permission 五个表
(2) 这个permission 表里面定义了 operation, resource object两个字段。
ACL
(1) object, permission, object-permission 三个表
(2) 这个permission 表里面定义了 user, operation 两个子段。
--
java.security 以前主要用来检查 代码code 的权限(根据Policy判断这段代码是否可以执行)。
现在加入了Subject (相当于role), 和认证部分,javax.security.auth.login (user login),可以用作 RBAC。
说实话,我感觉那套API相当蹩脚。
由于是标准,第三方提供了不少SPI (NT, Linux 验证)。你如果遵守这套标准(提供Adaptor),别人用起来就舒服一点。
RBAC参考实例图