我正在创建一个有许多用户和许多组织的应用程序。
一个用户可以在多个组织中,并且在每个组织中他们可以有一个角色。目前,只有“组织管理员”和“基本用户”。编辑:有关更多上下文,我希望用户能够成为 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 的未定义方法“角色”
而不是重定向用户。
谢谢!- 哈利索