用户管理的数据库表

时间:2015-04-14 21:24:29

标签: mysql database

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

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

用户

  • ID
  • userUUID
  • 用户名
  • 作用

但我想到了不同群体的分隔表。所以喜欢:

管理员

  • ID
  • userUUID( - >外键用户表)
  • accessRight1
  • accessRight2

订阅者

  • ID
  • userUUID( - >外键用户表)

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

谢谢!

1 个答案:

答案 0 :(得分:1)

如果你的角色很少会改变,那可能会有用。但是,您应该始终计划更改,并且允许您添加角色而不需要更改数据库架构的更灵活的选项将是这样的:

用户:

  • UID
  • 用户信息......

<强>角色:

  • 远离
  • 名称

<强>的UserRole:

  • uid(FK到用户表)
  • 摆脱(FK到角色表)

在您的代码中,您可以检查UserRoles表以确定用户是否具有给定角色,因此应该被允许做任何事情。

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

这样的事情:

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