具有多个角色的用户

时间:2015-07-29 09:31:18

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

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

用户可以在多个组织中,并且在每个组织内,他们可以拥有单个角色。目前,只有'组织管理员'和'基本用户'。 编辑:有关更多背景信息,我希望用户能够成为Org 1的组织管理员和组织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

但仅针对Org他们是OrgAdmin,因此这会阻止URL更改。但是,这并不起作用,因为任何形式都会返回false并阻止任何用户创建,或者返回:将Org管理为true,以便每个人都可以执行所有操作,无论角色如何。

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

编辑:此外,我可以创建:manage /:read,组织部分的方式正确地阻止人们管理/查看他们不应该做的事情,但是会抛出一个

  

未定义的方法`角色'为零:NilClass

而不是重定向用户。

谢谢! - Jaliso

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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? %>