【问题标题】:Manage controllers with namespace according to user role + cancancan + rails根据用户角色 + cancancan + rails 管理具有命名空间的控制器
【发布时间】:2018-06-21 11:25:45
【问题描述】:

==> 我有一个网站,有两个名称空间,如下所示

User::xyz_controller

User::abc_controller

Admin:xyz_controller

Admin:abc_controller

==> 三个角色的用户模型

admin leader consultant

如果用户有角色领导或顾问。他应该只访问用户命名空间控制器。如果用户具有管理员角色。管理员只能访问 Admin 命名空间控制器

==> 下面是我的 ability.rb 文件内容。

class Ability include CanCan::Ability def initialize(user) if user.has_role? :Admin can :manage, :all elsif user.has_role? :Leader cannot :manage, User elsif user.has_role? :Consultant cannot :manage, User end end end

【问题讨论】:

    标签: ruby-on-rails cancancan


    【解决方案1】:

    应用程序控制器

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-19
      • 2017-08-30
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 2023-03-11
      • 2020-01-03
      • 2012-03-03
      相关资源
      最近更新 更多