【发布时间】:2014-06-24 21:30:57
【问题描述】:
我目前有以下情况:
- 一个企业有很多项目
- 一个企业有很多用户
- 一个项目有很多用户
- 一个用户在不同的项目中有多个角色
这是用表Assignment建模的,它有project_id、role_id、user_id。
有四种角色:管理员、观察者、用户、访客。
我想根据我对某个项目的角色授予权限,但是使用 CanCan 我只收到我的用户而不是我所在的项目,所以我不知道如何根据用户授予权限仅限。
这是我当前的代码,它肯定是不正确的,但它现在已经工作了。
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
can [:activate], User
can [:show,:index,:project_summary, :add_stage],Project
# only if the user is logged in
if user.id!=nil
can [:create,:update,:edit],Project do |p|
(user.assignments.where(project_id: p.id,role_id: 1,user_id: user.id).any? || user.assignments.where(role_id: 1,user_id: user.id).any? )
end
can [:show,:update, :add_user], Enterprise do |e|
user.assignments.where(role_id: 1,user_id: user.id).any?
end
can [:show],Enterprise do |e|
user.enterprise.id==e.id
end
# can only update if its his own
can [:show,:edit, :update], User, id: user.id
end
end
问题是,现在我想让项目的“管理员”能够向项目添加新用户(这意味着创建一个作业),而这只有在我知道我是什么项目的情况下才能实现m 站在加上我的用户。
如果有人可以帮助我并解释如何通过“三重”关系(项目 - 用户 - 角色)实现这一目标,我将不胜感激。
谢谢!
【问题讨论】:
标签: ruby-on-rails permissions relationship cancan