应用程序控制器
before_action :current_ability, unless: :devise_controller?
private
def current_ability
controller_name_segments = params[:controller].split('/')
controller_name_segments.pop
controller_namespace = controller_name_segments.join('/').camelize
Ability.new(current_user, controller_namespace)
end
ability.rb
class Ability
include CanCan::Ability
def initialize(user, namespace)
case namespace
when 'Admin'
can :manage, :dashboard if user.has_role? :Admin
can :manage, Company if user.has_role? :Admin
can :manage, CompanyHistory if user.has_role? :Admin
can :manage, Record if user.has_role? :Admin
can :manage, Service if user.has_role? :Admin
can :manage, ProcessTable if user.has_role? :Admin
can :manage, User if user.has_role? :Admin
when 'Users'
can :manage, Company if user.has_role? :Consultant
can :manage, CompanyHistory if user.has_role? :Consultant
can :manage, Record if user.has_role? :Consultant
can :manage, Company if user.has_role? :Leader
can :manage, CompanyHistory if user.has_role? :Leader
can :manage, Record if user.has_role? :Leader
end
end
end
在控制器中定义
--> 无类使用
load_and_authorize_resource class: false
--> 与类一起使用
load_and_authorize_resource class: Company