【发布时间】:2017-04-01 22:36:52
【问题描述】:
例如,一个用户可以是admin 和player,我希望用户设置一个主要角色。例如,我可以是player,然后再转为admin。
显而易见的是在User 模型上附加main_role 和role_id。
但是,我担心我必须使主要角色与用户拥有的角色保持同步。例如,如果用户不再是玩家,那么她的main_role 就不能是玩家的。
我想到的另一种方式是对角色进行排序,其中第一个角色将成为主要角色。不过,我找不到一个简单的方法来做到这一点。
Ex: user.roles.map(&:name) => ["admin", "player"]
在这种情况下,主要角色是“管理员”,如果我想让主要角色成为玩家,我可以将“玩家”交换为第一。
有没有人对处理这个有什么好的建议?
谢谢!
【问题讨论】:
-
您指的是Rolify gem 吗?如果是这样,我对在这种情况下的主要角色和次要角色的概念感到有些困惑-不是角色二元,您要么拥有角色(以及该角色的授权),要么没有。区分主要角色和次要角色的动机是什么?
-
好吧,假设您有一个移动客户端,并且您希望根据用户是否是管理员来显示不同的视图。一个例子是当某人正在工作与自己使用应用程序时,等等。
-
我想我想在我的问题中得到的是为什么定义“主要”角色的概念。如果用户具有管理员和玩家的角色......那么他们肯定拥有与这两个角色相关的所有权利......将其中一个角色设为“主要”角色对您的应用程序有何好处?就我个人而言,我不会为多个角色的概念而烦恼..在这种情况下,我会选择一个具有 3 个角色之一的用户......玩家、管理员、管理员玩家。管理员玩家将简单地继承玩家和管理员的权限。但我不使用 rolify 所以我可能没有资格发表评论。
-
拥有不同的权利在未来会成为问题。我们希望拥有某些功能的管理员,例如锦标赛 A 或联赛 B。然后我们希望拥有球员,然后是队长等……当前角色的概念是,您可能为不同的事情拥有多个角色,但您会想要一个默认视图,以免被超级管理员拥有的所有选项所淹没。
标签: ruby-on-rails authorization roles rolify