【问题标题】:How should I design a main role for a user with rollify?我应该如何为具有 rollify 的用户设计主要角色?
【发布时间】:2017-04-01 22:36:52
【问题描述】:

例如,一个用户可以是adminplayer,我希望用户设置一个主要角色。例如,我可以是player,然后再转为admin

显而易见的是在User 模型上附加main_rolerole_id

但是,我担心我必须使主要角色与用户拥有的角色保持同步。例如,如果用户不再是玩家,那么她的main_role 就不能是玩家的。

我想到的另一种方式是对角色进行排序,其中第一个角色将成为主要角色。不过,我找不到一个简单的方法来做到这一点。

Ex: user.roles.map(&:name) => ["admin", "player"] 在这种情况下,主要角色是“管理员”,如果我想让主要角色成为玩家,我可以将“玩家”交换为第一。

有没有人对处理这个有什么好的建议?

谢谢!

【问题讨论】:

  • 您指的是Rolify gem 吗?如果是这样,我对在这种情况下的主要角色和次要角色的概念感到有些困惑-不是角色二元,您要么拥有角色(以及该角色的授权),要么没有。区分主要角色和次要角色的动机是什么?
  • 好吧,假设您有一个移动客户端,并且您希望根据用户是否是管理员来显示不同的视图。一个例子是当某人正在工作与自己使用应用程序时,等等。
  • 我想我想在我的问题中得到的是为什么定义“主要”角色的概念。如果用户具有管理员和玩家的角色......那么他们肯定拥有与这两个角色相关的所有权利......将其中一个角色设为“主要”角色对您的应用程序有何好处?就我个人而言,我不会为多个角色的概念而烦恼..在这种情况下,我会选择一个具有 3 个角色之一的用户......玩家、管理员、管理员玩家。管理员玩家将简单地继承玩家和管理员的权限。但我不使用 rolify 所以我可能没有资格发表评论。
  • 拥有不同的权利在未来会成为问题。我们希望拥有某些功能的管理员,例如锦标赛 A 或联赛 B。然后我们希望拥有球员,然后是队长等……当前角色的概念是,您可能为不同的事情拥有多个角色,但您会想要一个默认视图,以免被超级管理员拥有的所有选项所淹没。

标签: ruby-on-rails authorization roles rolify


【解决方案1】:

我最好称它为“current_role”。

更改角色列表时不要害怕检查当前角色。

如果用户丢失了他的 current_role 角色,则将 current_role 更改为他列表中的下一个角色。

是的,我建议在 users 表中设置一个 current_role,它使用外键和 ON DELETE RESTRICT、ON UPDATE CASCADE 来引用 role_id。

如果您使用 postgres 以外的其他工具,请使用 rail 的 db 一致性检查。

【讨论】:

  • 当前角色是一个更好的术语。那么,您建议使用一个引用 role_id 的 current_role?
猜你喜欢
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多