我目前正在使用设计和cancan制作项目。
为了解我的问题我有这个模型:
带有一些属性的用户和全局访问的is_admin布尔值
角色 belongs_to项目和具有每个项目用户特定能力的用户
项目 has_many用户可以编辑或不编辑的其他模型(取决于它在项目中的角色)
所以我的问题是我该怎么做?
其实我有这个能力课程:
class Ability
include CanCan::Ability
def initialize(user)
if user
can :read, :all # allow everyone to read everything
if user.is_admin?
can :manage, :all
end
end
end
end
我需要在模型中管理角色取决于我的项目模型还是其他什么? 提前谢谢。
答案 0 :(得分:2)
class Ability
include CanCan::Ability
def initialize(user)
if user
can :read, :all # allow everyone to read everything
if user.is_admin?
can :manage, :all
end
can manage, Project do |project|
project.users.include? user
#projects.users return the list of the users in the the role table.
end
end
end
end
你可以自定义它,但我认为这是开始的好方法。
答案 1 :(得分:1)
这是一种更清洁的方式来组织您的Ability.rb。
def initialize(user)
user ||= User.new # Set user to blank User.new if user isn't logged in.
# Everyone, including guests, can read everything
can :read, :all
# Will only let user manage if @project.admin_id == user.id
can :manage, Project, admin_id: user.id
end