权限位掩码在查看/编辑/添加/删除权限下应该是什么样子的?如何使用它


How permissions bitmask should look like with view/edit/add/remove permissions. How to use it?

用户可以查看/编辑/添加/删除对象(类别、用户、项目等)。什么是最好的做法来存储(在MySQL中),管理和检查用户是否有这样的权限。

Acl类将控制用户是否允许执行控制器的方法

我使用二进制字符串在数据库中存储为十六进制值。

当我从数据库中读取十六进制值(权限)时,我将其转换为二进制字符串,其中每个数字(0或1)代表某些权限标志的状态。权限标志已按二进制字符串中的位置定义。如

0 -> can read
1 -> can write
2 -> can access gallery
3 -> can access pools
4 -> can ban users
5 -> can drink beer
...

当需要时,只需验证每个二进制数字是否具有相应的权限,并将其作为布尔值存储在权限数组中。

另外,我已经存储了一些权限组,如管理员,版主,画廊编辑等…

看这里:Which data type is suitable for storing this situation?有更好的解释和例子

您确定要使用位掩码吗?

如果你有很多角色,你的位掩码可能会非常高,而查询谁有权限X将会降低性能。

我个人喜欢将这些数据存储在两列表中(UserId, PermissionId),这样既可扩展又易于维护。要检查谁拥有一个权限或哪个权限拥有一个用户,您只需要一个SELECT或JOIN命令。