我正在创建一个应用程序,其中有许多用户和许多组织。
用户可以在多个组织中,并且在每个组织内,他们可以拥有单个角色。目前,只有'组织管理员'和'基本用户'。 编辑:有关更多背景信息,我希望用户能够成为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
答案 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? %>