2013-09-23 135 views
4

我使用主動聯繫的康康舞授權適配器,帶Rolify一起,管理上的管理網站的授權被拒絕在活動管理員訪問權限。我有一個模型,company,即has_many :manuals,和另一種模式,manuals,即has_many :parts用戶不使用慘慘

如果用戶沒有訪問讀取admin/manuals/1和類型它到地址欄,他們得到適當的重定向,並與未經授權的消息呈現。但是,如果用戶輸入admin/manuals/1/parts,則不會拒絕他們的訪問。他們被帶到那個頁面,除了所有的部分都隱藏起來。他們應該通過未經授權的信息重定向到儀表板。

這裏是我的配置。預先感謝您提供的任何建議。

的config/routes.rb中

ActiveAdmin.routes(self) 

型號/ ability.rb

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    user ||= User.new 

    can :read, ActiveAdmin::Page, :name => "Dashboard" 

    if user.has_role? :admin 
     can :manage, :all 
    elsif user.has_role? :moderator 
     can :manage, Part, :manual => { :company_id => user.company_id } 
    else 
     can :read, Part, :manual => { :company_id => user.company_id } 
    end 
    end 
end 

我也覆蓋缺省的授權方法控制器/ application_controller.rb

rescue_from CanCan::AccessDenied do |exception| 
    redirect_to root_url, :alert => exception.message 
end 

def authenticate_admin_user! 
    authenticate_user! 
    unless user_signed_in? 
    flash[:alert] = "You are not authorized to view this page" 
    redirect_to root_path 
    end 
end 

def current_admin_user #use predefined method name 
    return nil unless user_signed_in? 
    current_user 
end 

def after_sign_in_path_for(user) 
    if current_user.has_role? :admin 
    admin_dashboard_path 
    elsif current_user.has_role? :moderator 
    admin_manuals_path 
    else 
    company_path(user.company) 
    end 
end 
+0

嘿你有沒有想出解決辦法?我處於獲取'protected method authorize !'錯誤的地步。 –

+0

我沒有。我結束了這麼多深層嵌套的路線,只是建立自己的管理員變得更容易。 – seancdavis

回答

1

您是否將方法load_and_authorize_resource添加到您的控制器中?

像這樣:

class SomeController < ApplicationController 
    load_and_authorize_resource 
    ... 
end 

Check Abilities & Authorization

+2

在'app/admin/parts.rb'中添加'controller.load_and_authorize_resource'或'controller.authorize_resource'會給我一個'protected method authorize!'錯誤。 – seancdavis