gpt4 book ai didi

ruby-on-rails - 设置 CanCan ability.rs 模型

转载 作者:行者123 更新时间:2023-12-04 03:53:55 24 4
gpt4 key购买 nike

我用Devise和CanCan成功制作了登录系统,我有3种类型的用户。管理员、内部和全局用户。我创建了 Controller 和索引操作:Admin、Cpanel、Report 和 State,并且我想限制某些用户对这些 Controller 的访问。

管理员用户 应具有访问权限:报告(全部)、状态(读取)、管理员(全部)

全局用户应具有访问权限:报告(只读)、状态(读取)、Cpanel(全部)

内部用户 应具有访问权限:报告(全部)、状态(读取)

我尝试使用ability.rs中的以下代码来做到这一点 :

class Ability
include CanCan::Ability

def initialize(user)
user ||= User.new # guest user (not logged in)

if user.role? :admin
can :manage, [Report, Admin]
can :read, State
elsif user.role? :global_user
can :read, [Report, State]
can :manage, Cpanel
elsif user.role? :internal_user
can :manage, Report
can :read, State
end
end
end

目前我在这个 Controller 中只有索引操作,当我使用内部用户登录应用程序时,我可以访问/admin,这不是我想要的行为。我想限制对所有 Controller 的访问,而不是在ability.rb 类中列出的 Controller 。

Source code is here

最佳答案

如果我要阻止对整个 Controller 的访问,我会创建一个 before 过滤器,如果用户没有管理员角色,则将用户重定向到访问被拒绝的页面。可能看起来像:

def check_permissions
raise CanCan::AccessDenied unless @current_user.role?(:admin)
end

例如,如果我只想阻止访问更新和创建,我会这样做:
def update
raise CanCan::AccessDenied unless can?(:update,Thing)
...
end

def create
raise CanCan::AccessDenied unless can?(:create,Thing)
...
end

您可以处理 CanCan::AccessDenied您的应用程序 Controller 中的异常:
rescue_from CanCan::AccessDenied do |exception|
flash[:error] = exception.message
redirect_to no_access_path
end

我有一些关于 CanCan 和 Devise 的非常好的帖子 herehere

更新
我在我的应用程序 Controller 中使用这个方法来设置我当前的用户变量:
# Make the current user object available to views
#----------------------------------------------------------------------------
def get_user
@current_user = session[:current_user]
end

关于ruby-on-rails - 设置 CanCan ability.rs 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5162078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com