【问题标题】:User with Multiple Roles具有多个角色的用户
【发布时间】:2015-07-29 09:31:18
【问题描述】:

我正在创建一个有许多用户和许多组织的应用程序。

一个用户可以在多个组织中,并且在每个组织中,他们可以拥有一个角色。目前,只有“组织管理员”和“基本用户”。 编辑:关于更多上下文,我希望用户能够成为 Org 1 的 Org Admin 和 Org 2 的基本用户,这意味着该用户对每个组织都有不同的能力。

组织管理员可以将用户添加到组织,但我设置能力的方式目前并不能阻止基本用户也这样做。

   ...
   else
      #Can manage Orgs where Role = OrgAdmin
      can :manage, Organisation do |org|
        user.users_roles.where(:organisation_id => org.id).first.role.name == 'Organisation Admin'
      end

      #Can view Orgs where Role = Basic User
      can :read, Organisation do |org|
        user.users_roles.where(:organisation_id => org.id).first.role.name == 'Basic User'
      end

在这之后,我目前...

can :create, User

...当然,任何人都可以创建用户

我需要类似的东西

if can? :manage, @org
  can :create, User 
end

但仅适用于他们是 OrgAdmin 的 Org,因此这将阻止 URL 更改。但是,这不起作用,因为任何表单要么返回 false 并阻止任何用户创建,要么返回 :manage Org 作为 true 让每个人都可以做任何事情,而不管角色如何。

任何想法或指向正确的方向将不胜感激。

编辑:此外,我可以正确创建 :manage/:read, Organization 部分的方式可以防止人们管理/查看他们不应该管理/查看的内容,但会引发

nil:NilClass 的未定义方法“角色”

而不是重定向用户。

谢谢! - 哈利索

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 cancancan


    【解决方案1】:

    我建议你使用 gem Devise。但是,您可以在用户中创建一个布尔字段,您可以在其中说明每个用户是否属于组织管理员。然后,您创建一个控制器(一个页面),只有管理员可以访问他们定义每个用户之前创建的布尔字段的位置,以及他们是否属于或不属于 org Admin。如果我不清楚,请告诉我。

    【讨论】:

    • 我目前正在使用Devise,并且有一个用户的管理字段,但这是用于整个应用程序的。我想允许用户成为组织 1 的组织管理员和组织 2 的基本用户。如果这有意义吗?我会更新我的问题。
    • 有点复杂。但是,您可以在表 users 中创建一个名为“permission_level” default = 0 的字段。这里说,permission_level = 0 的用户可以做某事,permission_level = 10 的用户可以做其他事情,依此类推。我希望你能理解我。
    • 目前,我有用户,而用户有 users_roles (user.users_roles),这包括角色 ID、组织 ID 和用户 ID,这为每个组织提供了一个角色。我如何能够仅使用 1 个字段为多个组织授予权限级别?
    • 你必须考虑的参数是permission_level,你可以在每个用户中更改它并在控制器中使用它来说明哪个用户可以做什么。如果您已经拥有 users_role,也许您不需要创建字段“permission_level”
    【解决方案2】:

    您可以将不同的部分形式呈现到注册表单中: 一个例子:

    <%= render partial: 'admin/admin/form', locals: {f: f} if resource.company? %>
    <%= render partial: 'admin/agents/form', locals: {f: f} if resource.agent? %>
    <%= render partial: 'admin/managers/form', locals: {f: f} if resource.building_manager? %>
    

    【讨论】:

    • 目前,当用户通过 Devise 注册由自己创建时,他们没有角色并且不隶属于任何组织。我目前正在做的是通过组织(/organisations/:id/users/new)创建一个用户,然后将该用户添加到组织中(@organisation.users
    猜你喜欢
    • 2019-05-03
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多