【问题标题】:Database Tables for User management用于用户管理的数据库表
【发布时间】:2015-04-14 21:24:28
【问题描述】:

我想从您那里获得一些关于用户角色管理最佳实践的建议。

我想创建一个用户注册并具有不同角色的应用程序。现在显而易见的是,创建 users 表并将用户数据保存在那里:

用户

  • 身份证
  • 用户UUID
  • 用户名
  • 角色

但我会考虑不同组的分隔表。比如:

管理员

  • 身份证
  • userUUID (-> 外键用户表)
  • accessRight1
  • accessRight2

订阅者

  • 身份证
  • userUUID (-> 外键用户表)

这有意义吗?那么所有用户,无论其角色如何,都应该在一个数据库中吗?那么不同角色的具体信息又是什么呢?

谢谢!

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    如果你的角色很少会改变,那可能会奏效。但是,您应该始终计划更改,并且更灵活的选项允许您添加角色而无需更改数据库架构,如下所示:

    用户:

    • uid
    • 用户信息...

    角色:

    • 摆脱
    • 姓名

    用户角色:

    • uid(FK 到用户表)
    • rid(FK 到角色表)

    然后,您可以在您的代码中检查 UserRoles 表以确定用户是否具有给定的角色,因此应该允许执行任何操作。

    此外,如果您想混合和匹配跨多个角色的操作权限(即管理员和版主都有权删除帖子或其他内容)。您可以使用 Permissions 表和将其链接到 Roles 表的连接表 (RolePermissions) 添加另一个级别。那时您的访问检查会变得稍微复杂一些,需要您加入 UserRoles 表和 RolePermissions 加入表以确定用户是否具有执行某事的给定权限。

    类似这样的:

    SELECT * 
        FROM UserRoles u INNER JOIN RolePermissions p 
            ON u.rid=p.rid 
        WHERE u.ID=<USER> AND p.pid=<PERMISSION>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多