基于信誉实现权限 [已关闭]

2022-08-30 11:32:54

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

  • 创建者 - 进行更改、接受更改、更改权限
  • 接受更改
  • 进行更改
  • 视图

如何在数据库中为用户组实现这种权限系统?

编辑:组/权限由信誉定义,就像在StackOverflow上一样。

编辑2 - 更详细地:每个文件都需要有权限,项目需要新创建文件的默认权限,我还需要设置MySQL数据库权限。


答案 1
user_table
id, etc

permission table
id, user_id, permission_type

使用此结构,每个用户都可以拥有与其帐户关联的多个权限类型,每个权限类型对应于他们有权访问的每组功能。您永远不需要为了添加新类型的权限而更改表结构。

要更进一步,您可以将每种类型的权限设置为二进制数。这样,您就可以使用按位运算符使一组权限由一个整数表示。

例如,如果你有常量

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

如果这样做,则每组权限只需要一个数据库记录。


答案 2

我过去曾使用过Zend_Acl。我可以推荐它。一个久经考验的库,非常易于实现,可以独立使用。如果您以后要添加不同的权限方案,则此选项将很好地扩展。


推荐