用户<M-M>角色<M-M>权限
模型的查询在SQL中(带或不带递归支持或附加结构)更简单,因为根本没有需要遍历的角色层次结构。
Windows ACL Groups(忽略嵌套组)与角色非常相似;用户属于一个或多个组,该组授予权限(或拒绝权限,但这是不同的情况)。
我建议采用上述提到的变化,允许在角色之间进行权限聚合。一个简单的聚合模型如下:
用户从分配给他们的所有角色中获得联合权限。
(有效权限通常会在授权期间生成,但没有层次结构,也可以通过SQL查询相对简单地生成。)
因此,权限被绑定到每个角色,几乎没有重叠,如“方法#2”所示,其区别在于:没有层次结构。
例如,为了允许一个特殊管理员搜索帖子(并删除“不良”帖子),只需分配“基本用户”和“有限管理员”角色1。
使用一个非分层的多角色系统可以使其更加清晰,摆脱分层的负担,同时提供灵活/可组合/可配置的角色原型。1 这并不是一个特别好的例子。实际上,角色应该有不同的名称(例如“账户支持”或“内容审核员”),并且涵盖不同的权限集;这些权限集可能会根据试错和时下的业务规则而随时间变化。
虽然我反对为此类系统建立等级制度,但在更复杂的系统中,可能需要允许角色之间的关系,主要用于分组。这种关系通常应该是独立于有效权限的存在,用于其他管理目的。