一尘不染

根据信誉实施权限

mysql

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

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

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

编辑:组/权限由信誉定义,例如在StackOverflow上。

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


阅读 281

收藏
2020-05-17

共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

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

2020-05-17