2012-06-09 23 views
0

我正在使用Ruby on Rails,但我认为这个问题可以应用于任何数据库设计。我正在尝试开发我自己的权限系统。使用数组权限

难道设计有一个用户可以编辑的数组吗?即User具有值为[Articles, Events, Costs]can_edit或具有值为[All]Usercan_view

然后我可以对正在编辑的内容进行检查。或者这是一个糟糕的设计?

回答

2

一般来说,你的数据库设计应该被正确地规范化。这意味着你不应该在一行中存储多个值。你可能会好得多由具有三个表

  • Permission有列permission_idpermission_type并列出了有效的权限
  • Useruser_id列,列出了设计服务的价值用户
  • User_Permission是两者之间的映射表。它列permission_iduser_id两者定义为外键分别PermissionUser
+0

这实际上是真正有用的。但是,我实际上也有一个“网络”类。 “用户”属于“网络”,而“权限”则针对给定的“网络”。 'User'也可以是多个'Networks'的一部分。你可以有一个三重组合键,还是有另一种方式来做到这一点? 或者我有一个'User_Network'表,然后一个外键到'Network_Permission'表? 对不起,如果没有意义。 – dewyze

+0

@JDewzy - 如果'Permission'依赖于'Network',那么你通常需要一个User表,一个User_Network表,一个Network表,一个Network_Permission表和一个Permission。表。 –

+0

然后,将'Permission'连接到'User'? “User_Network”表中存在“Network_Permission”的外键? – dewyze