0

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

一个用户可以在多个组织中,并且在每个组织中他们可以有一个角色。目前,只有“组织管理员”和“基本用户”。编辑:有关更多上下文,我希望用户能够成为 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 的未定义方法“角色”

而不是重定向用户。

谢谢!- 哈利索

4

2 回答 2

1

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

于 2015-07-29T09:44:39.243 回答
0

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

<%= 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? %>
于 2015-07-29T11:25:56.983 回答