用cancan和devise授权用户

时间:2011-10-18 22:39:27

标签: ruby-on-rails ruby-on-rails-3 devise authorization cancan

我有一个用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

现在每当我尝试访问任何页面时,它都会抛出异常消息“您无权访问此页面”。而不是能够访问该网站的那一部分。

1 个答案:

答案 0 :(得分:1)

我感觉cancan工作正常。尝试以这种方式调试:

  1. 暂时取出check_authorization
  2. 在您的视图中添加几行以查看您拥有的功能:

    %h1 What abilities do I have?
    %ul
      %li can?(:manage, Data)
      %li can?(:manage, :all)
      %li etc..