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]
只会在那些控制器操作之前执行检查,并允许任何人访问索引和显示操作。
我想在我的 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]
只会在那些控制器操作之前执行检查,并允许任何人访问索引和显示操作。