我目前正在为用户数据库开发权限系统,其中每个用户都可以是一个或多个权限组的成员。例如:我的用户john_doe
是该组"员工"的成员。和"会计"。可以创建新组,因此这部分是动态的,组的列表与john_doe
的记录一起存储,我可以阅读以了解他是否属于某个组。
现在,我想要处理包含通配符的URL的访问权限。此外,我希望它采用白名单方式,但基于其他规则的例外情况。例如:小组"工作人员"应该能够访问网址http://example.com/dashboard/*
但不能访问http://example.com/dashboard/accounting
,除非他/她也是该群组的一部分" accounting"。更一般地说,应该能够访问与他/她的组的任何通配URL匹配的所有URL,减去他/她不属于的组的通配URL。
在数据库中组织数据的最佳方法是什么,以便验证用户是否能够或不能访问URL(完全定义,没有通配符),知道他/她所属的组列表是否容易和有效?
我这样做的方法是存储一个通配URL列表以及权限组的记录,然后执行PHP中的所有逻辑:获取该用户的组列表,获取列入白名单的URL列表从他所属的群组中,从他不属于的群组中获取列入黑名单的URL,并将请求的URL与白名单匹配,然后匹配黑名单。听起来效率很低但我不知道是否有更好的方法。