ruby-on-rails – 设置CanCan ability.rs模型
发布时间:2020-12-17 03:52:20 所属栏目:百科 来源:网络整理
导读:我成功地用Devise和CanCan建立了登录系统,我有3种类型的用户.管理员,内部和全球用户.我创建了控制器和索引操作:管理员,Cpanel,报告和状态,我想限制某些用户对此控制器的访问. 管理员用户应具有访问权限:报告(全部),状态(读取),管理员(全部) 全局用户应具有
我成功地用Devise和CanCan建立了登录系统,我有3种类型的用户.管理员,内部和全球用户.我创建了控制器和索引操作:管理员,Cpanel,报告和状态,我想限制某些用户对此控制器的访问.
管理员用户应具有访问权限:报告(全部),状态(读取),管理员(全部) 全局用户应具有访问权限:报告(仅读取),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,State] can :manage,Cpanel elsif user.role? :internal_user can :manage,Report can :read,State end end end 这时我在这个控制器中只有索引操作,当我用内部用户登录app时,我可以访问/ admin,例如,这不是我想要的行为.我想限制访问所有控制器而不是capability.rb类中列出的控制器. Source code is here 解决方法
如果我要阻止访问整个控制器,我会创建一个before过滤器,如果用户没有admin角色,则会将用户重定向到拒绝访问的页面.可能看起来像:
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异常: rescue_from CanCan::AccessDenied do |exception| flash[:error] = exception.message redirect_to no_access_path end 我有一些关于CanCan和Devise here和here的相当不错的帖子 UPDATE # Make the current user object available to views #---------------------------------------------------------------------------- def get_user @current_user = session[:current_user] end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |