【问题标题】:How to deal with user permissions for admin/users when adding new permissions?添加新权限时如何处理管理员/用户的用户权限?
【发布时间】:2021-05-12 02:37:21
【问题描述】:

我正在创建一个所有用户都拥有不同类型权限的网站。

我没有执行基于角色的权限。

用户可以加入不同的群组,并为每个群组获得不同的权限。

我在这里苦苦挣扎的部分是如何处理管理员(组创建者)权限。

管理员权限与普通用户略有不同,因为即使添加了新权限,管理员也始终可以访问每个权限。

虽然用户必须由管理员授予权限。但管理员可以将所有权限授予用户,但编辑管理员权限除外。

我想我可以有一张桌子,上面有UsersIdPermissionIdType(Admin/User)GroupID

每个组只有 1 名管理员。但是对我来说似乎很愚蠢的部分是如果我们(应用程序)要添加另一个权限功能。我们必须用type = Admin 查询每个UserID,并为该权限插入一条记录。这似乎非常低效。有没有更好的方法可以做到这一点?

【问题讨论】:

  • 有一个特殊的 PermissionId,它对您的系统意味着“全部”。或者,如果 Type 为 Admin,则忽略 PermissionId。或者,有一个特殊的 PermissionId 表示“管理员”并完全删除 Type 字段。
  • 另一个权限能力可能是什么? (虽然我想我可以看到为什么基于角色的权限很受欢迎)
  • 是的,角色是个好主意,但这个应用程序不会有角色。它主要是允许组中的每个用户访问由管理员或其他指定用户设置的组中的功能。它真的只是Super adminusers

标签: mysql database data-structures permissions


【解决方案1】:

在您的 Group 表上创建一个 AdminUserId 列。

【讨论】:

  • 好的,我想到了。但是当user/admin 登录并进入组时,我该如何处理权限?我是否要查询Group 表中的AdminUserId 将其与UserId If AdminUserId !== UserId 进行比较,然后查询UserPermissions 表?或者这一切都可以在一个查询中完成吗?我试图避免做 2 个查询。我不确定,该怎么办
  • 您可以在用户登录时在用户会话中保留isGroupAdmin 值。如果经常使用,您也可以在用户会话中保留userPermissions 值。
  • 好的,我想我会这样做的。如果有很多权限,我应该将它们存储在一个数组中并检查用户权限是否在数组中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 2013-12-21
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多