我有一个用Devise创建的用户模型,它有一个admin boolean字段和一个角色整数字段。我正在尝试创建一个能力类,允许非管理员用户具有基于角色的某些能力,但是我遇到了这个过程的问题。我已经创建了一个授权控制器:
class AuthorizedController < ApplicationController
before_filter :authenticate_user!
check_authorization :unless => :devise_controller?
load_and_authorize_resource
rescue_from CanCan::AccessDenied do |exception|
flash[:alert] = exception.message
redirect_to root_url
end
end
class Ability
include CanCan::Ability
def initialize(user)
if !user
can :read, :all
end
if user
admin_rules if user.admin?
commenter_rules if user.role.equal?("1")
author_rules if user.role.equal?("2")
end
end
def admin_rules
can :manage, :all
end
def commenter_rules
can :manage, Data, :active => true, :user_id => user.id
end
def author_rules
can :manage, Post, :active => true, :user_id => user.id
end
end
现在每当我尝试访问任何页面时,它都会抛出异常消息“您无权访问此页面”。而不是能够访问该网站的那一部分。
答案 0 :(得分:1)
我感觉cancan
工作正常。尝试以这种方式调试:
check_authorization
在您的视图中添加几行以查看您拥有的功能:
%h1 What abilities do I have?
%ul
%li can?(:manage, Data)
%li can?(:manage, :all)
%li etc..