如果我有多个用户和多个页面,并且每个用户都可以管理任意数量的页面,并且每个页面都可以由任意数量的管理员管理,我怎样才能将所有这些权限存储在数据库?
例如,我可以在users表中有一个字段,它只是一个以逗号分隔的页面ID列表,或者是每个页面的类似字段(由...等管理)。但这需要我在数据库出来后处理它。
我可以为每个用户提供他们自己的表格,使用key =>值类型的布局,其中我有user => someuser,name => some guy,permissions => whatever,page_id =&gt ; 4,page_id => 8,page_id => 12等。但这看起来很混乱,需要额外的权限才能为mysql用户提供。
假设页面数量相对较少(它会是),我可以在users表中放置一个'flags'字段,一个32位的INT(这里不会有超过32个页面')实现)。但这只会允许一种开/关的特权。
我还考虑过拥有一个用户表,然后每个用户入口指向该用户的权限表,每个页面都有一行,对该用户具有适当的权限 - 比其他用户更干净“我列出的每个用户表“解决方案,但同样需要mysql帐户的额外权限。
还有其他想法吗?根据您的经验,最终解决这个问题的方法是什么?
答案 0 :(得分:18)
很多< - >许多关系通常用中间表建模。在你的情况下,你会有这些表:
User UserPage Page
------ ----------- -------
UserID UserID PageID
... PageID ...
中间表(此处为UserPage
)用于存储特定于该组ID的信息(在本例中为您的权限)。
答案 1 :(得分:2)
规范的方法是有一个中间表,只有两个字段:每个连接表的主键。
答案 2 :(得分:1)
您需要的是映射表。
USER -----< USER_PERMISSIONS> ----- PAGES
新表的主键是由user_id和page_id组成的复合键
这将为您提供最大的灵活性,并允许添加新页面而无需更改架构。