我目前正在为许多用户对其具有不同访问权限的资源设计一个基于角色的身份验证系统。
一个角色可以是单个用户,也可以是一组角色(因此一个角色是一个角色树)。(见下图)
一个资源可以有多个身份验证属性(如读取、写入、删除),其中每一个都是允许访问操作的角色列表。(见下图)
问题是如果我想检查用户是否有权访问属性,我必须在最坏的情况下遍历 n 棵树(其中 n 是分配给属性的角色数)。
例如,要检查“Max”是否可以读取属性,我可能必须检查营销、管理和管理树是否包含“Max”。
您是否知道任何算法或替代方法可以删除相当昂贵的树搜索,同时保持角色系统或同样强大的东西。
完美的情况是对 n 个角色进行 O(log(n)) 之类的查找。
谢谢, 芬恩