【问题标题】:How to restrict the access to models for different user roles in rails (cancan gem)?如何限制rails中不同用户角色对模型的访问(可以gem)?
【发布时间】:2017-12-21 19:41:12
【问题描述】:

我希望在我的 rails 应用程序中拥有 3 个用户级别,分别是管理员、经理、客户。 所以我创建了 3 个设计模型作为管理员、经理和客户。 在我的应用程序中,有产品、交付、服务的模型和控制器。 我想为每个模型设置访问级别。

因此管理员可以访问所有模型、控制器

经理有权访问产品、交付

客户可以访问服务

我如何编写能力模型来满足这些要求 我写的如下,不知道对不对。

class Ability
  include CanCan::Ability
    def initialize(user)
        # Define abilities for the passed in user here. For example:
        #
          user ||= User.new # guest user (not logged in)
          if user.admin?
            can :manage, :all
          elsif user.manager?
            can :manage, product ,delivery
          elsif user.customer?
            can :manage, services
          end
    end

并请帮助我为模型编写代码以限制不同的用户角色访问。 请善待我!

【问题讨论】:

    标签: ruby-on-rails ruby devise cancan


    【解决方案1】:

    我认为解决此问题的最简单方法是在您的控制器中。假设您有一个带有控制器的书籍模型,并且只想允许管理员访问这部分。最好在您的预订控制器中创建一个方法,并使用 before 操作方法调用它:

    class BookingsController < ApplicationController
      before_action :check_admin
    
      def check_admin
        return unless admin_signed_in?
        redirect_to root_path, error: 'You are not allowed to access this part of the site'
      end
    end
    

    这将在预订控制器中发生任何事情时执行 check_admin 方法,并且除非管理员登录,否则将重定向到您的根路径。设计还带有 user_signed_in?和manager_signed_in?如果您创建了具有这些名称的模型,则为助手。

    例如,您可以通过决定哪些控制器操作将执行该操作来进行更多定制

    before_action :check_admin, only: [:edit, :create, :delete, :update, :new]
    

    只会在这些控制器操作之前执行检查,并允许任何人访问索引和显示操作。

    【讨论】:

      猜你喜欢
      • 2015-10-01
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 2021-10-16
      • 2012-12-27
      • 2020-02-01
      相关资源
      最近更新 更多