Ruby on rails 基于项目和角色的CanCanCan权限
我目前的情况如下:Ruby on rails 基于项目和角色的CanCanCan权限,ruby-on-rails,permissions,relationship,cancan,Ruby On Rails,Permissions,Relationship,Cancan,我目前的情况如下: 一个企业有很多项目 一个企业有很多用户 一个项目有许多用户 一个用户在不同的项目上有许多角色 这是用表分配建模的,表分配有项目id、角色id、用户id 有四个角色:管理员、观察者、用户、来宾 我想根据我在特定项目中的角色授予权限,但是CanCan只接收我的用户,而不是我所在的项目,因此我不知道如何仅基于用户授予权限 这是我当前的代码,从辩护上说是不正确的,但它已经起作用了 def initialize(user) user ||= User.new # guest
- 一个企业有很多项目
- 一个企业有很多用户
- 一个项目有许多用户
- 一个用户在不同的项目上有许多角色
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
问题是,现在我想让项目的“管理员”能够向项目添加新用户(这意味着创建任务),而这只有在我知道我所在的项目以及我的用户的情况下才能实现
如果有人能帮助我,并解释我如何通过“三重”关系(项目-用户-角色)实现这一点,我将非常感激
谢谢 您需要根据用户和项目验证角色。因此,您需要覆盖可以进入ApplicationController或从其他需要权限的控制器设置的能力方法
def current_ability
@current_ability ||= Ability.new(current_user, params[:project_id]) // Or params[:id]
end
你可以像上面那样做
然后你可以从这里得到这个角色
Assignment.find_by(user.id: self.id, project.id: project_id).role.name
如果您在role方法中有名称