【问题标题】:Various roles for one user in PHPPHP中一个用户的各种角色
【发布时间】:2021-12-19 14:17:09
【问题描述】:

我想为我的网站做一个后台。问题是,当我介绍一个具有例如两个角色的用户时,我希望用户选择要使用的角色,但我不知道该怎么做。我尝试了很多不同的方法,例如在 MySQL 中用逗号分隔这两个角色,并在 PHP 中将它们分隔,但没有奏效。

【问题讨论】:

  • 欢迎来到 Stackoverflow,如果您分享具体的代码我们可能会提供帮助,也许有您没有看到的语法问题。您应该尝试更具体,例如当我尝试 A 我得到 B 但我想要 C 时。也许你先看看这个问题stackoverflow.com/help/how-to-ask

标签: javascript php html jquery mysql


【解决方案1】:

假设你有一个用户表,一个用户可以有多个角色。

您可以为角色创建一个主表(比如说角色)

你可以在用户表上有一个字段说 user_roles -> 它可以有像 1,2,4 这样的值

注意:- 数字/逗号之间不应有空格

在前端,您可以使用 mutiselect / tags UI 元素为用户输入角色。

在服务器端获取用户的角色 - 你可以使用 explode() + in_array() 来检查角色是否存在

comma separated example

编辑:-

添加角色时需要验证(即:当已选择特定类型时,允许选择哪个用户的角色) 对于授权,应将用户的角色添加到会话中:- 这将有助于允许用户执行他被允许执行的任务。

您可以使用第三张表来维护用户的角色(如 @ADyson 建议的那样),如果您想根据用户 + 角色加入表,这将有所帮助,但您需要在开始会话时加入角色表以获取用户数据为用户。

【讨论】:

  • 在这种情况下,我正在使用“admin”、“trainer”和“athlete”。我怎样才能使它适应您的解决方案?
  • 更好的设计是创建第三个 UserRole 表,以实现规范化的多对多关系
  • @ADyson 是的,毫无疑问,这也可以是一个很好的解决方案,但是在分配用户角色时它需要如何验证,这里用户有多个角色。调整逗号分隔将只检查一个表(用户表),我认为这很容易。但我不明白为什么将其降级为一种可能的方法。
  • 使用更好的表结构验证会容易得多。您还应该阅读stackoverflow.com/a/3653574/5947043,了解为什么数据库中的逗号分隔列表会导致问题。
  • 谢谢@ADyson,我检查了你的链接和它的真实性,我也不喜欢用分隔符存储值,但在这种情况下它很简单,对于“user_role” - 它主要存储在会话,我从来不需要将其作为外键。关于重复问题:- 这可以在添加时检查,并且 user_role 不经常更新。此外 - 许多框架具有将其转换为数组的内置方法,反之亦然。并且 user_role 非常有限,最大可以在 5 到 10 左右。我更喜欢这里的逗号,因为登录时只需要一个表,然后它将在会话中。
猜你喜欢
  • 2012-01-16
  • 2017-12-17
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 2019-04-27
  • 2012-04-04
  • 2016-10-03
相关资源
最近更新 更多