基于信誉实现权限

我正在创build一个网站,其中有每个用户或用户组的项目,用户和权限。 这是一个社区协作工具,我有4个不同的权限:

  • 创作者 – 进行更改,接受更改,更改权限
  • 接受更改
  • 做出改变
  • 视图

我怎么能在数据库中实现这种权限系统,供用户组使用?

编辑:组/权限是由声誉定义,就像在StackOverflow。

编辑2 – 更多细节:每个文件需要有权限,项目需要默认权限为新创build的文件,我还需要设置MySQL数据库权限。

user_table id, etc permission table id, user_id, permission_type 

通过这种结构,每个用户可以拥有多个与他们的账户相关联的权限types,每个权限types可以访问每个权限types。 您将永远不需要更改表结构以添加新的types的权限。

为了更进一步,您可以使每种types的许可都是二进制数字。 这样你可以通过使用按位运算符使一组权限由一个整数表示。

例如,如果你有常量

 PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1 PERMISSION_MAKE_CHANGES = bindec('010') = 2 PERMISSION_ACCEPT_CHANGES = bindec('100') = 4 

您可以使用按位运算符“|”将这些值合并为一个整数

 (PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions 

然后检查他们是否有特定的权限,使用按位运算符“&”

 ($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true 

如果你这样做了,你只需要为每一组权限设置一个数据库logging。

我过去为此使用了Zend_Acl 。 我可以推荐它。 一个久经考验的库,很容易实现,可以单独使用。 如果您之后添加了不同的权限scheme,则此选项可以很好地扩展。

我会创build两个表 用户和行列。

 User ----- id username rankID Ranks ------ id makeChanges acceptChanges changePermissions view 

然后,只需在Ranks表中创build您想要的各个等级,并将用户的等级ID设置为与您所需的相匹配。 确保在Ranks表中设置每个字段的值为0或1; 与0不具备该能力和1有该选项。

编辑如果你打算在没有数据库的情况下这样做,那么你可以使用PHP5中的类甚至实例来完成。 例如,假设您为原始文章中的每个东西都设置了名称:

 Creator - make changes, accept changes, change permissions Reviewer - Accept changes Editor - Make changes Regular - View 

那么你可以做下面的事情。 (数据库方式显然是一个更好的方法,但这只是一个例子。)

 class Regular { public function View() { //Do the view stuff in here } } class Editor extends Regular implements Edit { } class Reviewer extends Regular implements Review { } interface Review { public function AcceptChanges() { //Do the accept changes here } } interface Edit { public function MakeChanges() { //Do the make changes stuff here } } class Creator extends Regular implements Edit, Review { public function ChangePermissions() { //Do the change permissions stuff here } }