rails(cancangem)如何限制不同用户角色对模型的访问?

How to restrict the access to models for different user roles in rails (cancan gem)?

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

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

经理有权访问产品、交付

客户可以访问服务

如何编写能力模型来满足这些要求 我写成follows.Don不知道对不对

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

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

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

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 方法,并将重定向到您的根路径,除非管理员已登录。Devise 还附带 user_signed_in? manager_signed_in?如果您使用这些名称创建了模型,则为助手。

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

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

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