我想在我的rails应用程序中使用3个用户级别作为Admin,Manager,Customer。 所以我创建了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
请帮助我编写模型代码,以限制不同的用户角色访问。 请给我足够的帮助!
答案 0 :(得分:0)
我认为解决这个问题最简单的方法就是在你的控制器中。让我们说你有一个带控制器的书模型,只想让管理员访问这个部分。最好在预订控制器中创建一个方法,并使用before action方法调用它:
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方法,并且将重定向到您的根路径,除非管理员已登录.Dextise还附带user_signed_in?和manager_signed_in?如果您已经创建了带有这些名称的模型,那就是帮助者。
您可以通过决定执行操作的控制器操作来定制更多内容,例如
before_action :check_admin, only: [:edit, :create, :delete, :update, :new]
只会在这些控制器操作之前执行检查,并允许任何人访问索引并显示操作。