为ACL设计数据库

时间:2012-02-11 18:04:32

标签: php database database-design orm acl

对于我正在进行的项目,我需要为用户,几种不同类型的项目以及类似acl的权限系统设计数据库。

基本上,这就是我想做的事情(更复杂,但这足以证明我的意思):

  • user:(id,name,password)
  • 文章:(id,title,body)
  • image:(id,title,file_name)
  • 权限:(item_type,item_id,user_id,读取,写入,管理)

(itemType和itemId是一个复合外键,引用文章或图片,具体取决于item_type)

有人会说使用权限表不是一个好主意,并且通过向文章和图像添加读取,写入和管理列可以实现同样的目的,但请记住,可能有多个用户具有不同的权限项目。放弃它不是一种选择。

在我看来,这样可行。但是当涉及到实现时,我找不到一个php orm给我一些自由来做到这一点。这让我相信我可能会做错事。

所以,我的问题是: 为此实现ACL和设计数据库的正确方法是什么? 如何为企业级应用程序完成? 是否有非db ACL解决方案?

1 个答案:

答案 0 :(得分:1)

您只需拥有一个many-to-many表,该表将绑定用户权限以及可能解决您的窒息点的对象。 它将有 - user_id和permission_id,object_id将引用3个不同的表。

意思是:

user_id(references users),permission_id(references permissions),object_id (references image?)
1 ,2(read),2
1 ,3(write),2
1 , 4(exec),2

希望它有助于升技