2011-05-26 151 views
0

我使用康康舞我的應用程序慘慘授權問題

我ability.rb類是

class Ability 
    include CanCan::Ability 

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

    if user.role? :admin 
     can :manage, :all 
    elsif user.role? :operations 
     can :manage, :all 
    elsif user.role? :customer_support 
     can :read, :all 
    else 
     user.role? :marketing 
    can :read, :all 
    end 
end 
end 

,我在user.rb

def role?(role) 
    self.roles.include? role.to_s 
    end 

我還加 load_and_authorize_resource添加方法在我的控制器中說products_controller可以授權用戶,並允許他在此控制器中執行某些操作, 但我的問題是當用戶獲取以管理員身份登錄作爲角色,他無法添加新產品,因此會導致拒絕訪問被拒絕。

我的看法是

<% if can? :create, Product %> 
       <td class="action"><%= link_to 'Show', product %></td> 
       <td class="action"><%= link_to 'Edit', edit_product_path(product) %></td> 
       <td class="action"><%= link_to 'Destroy', product, :confirm => 'Are you sure?', :method => :delete %></td> 
      <% end %> 

也未顯示此鏈接到admin作爲有所有進入管理但他仍然不能訪問這個動作?

我還缺少什麼?

plz help?

回答

1

你是否按照cancan wiki中的說明操作? https://github.com/ryanb/cancan/wiki/Role-Based-Authorization

Cancan爲每個用戶存儲角色的默認策略是使用位掩碼,但wiki在這裏提到了不同的解決方案:https://github.com/ryanb/cancan/wiki/Separate-Role-Model

+0

Greate在https://github.com/ryanb/cancan/wiki/Separate-Role-Model找到答案感謝您使用cancan進行用戶和角色之間的多對多關聯。感謝幫助 – 2011-05-26 07:55:39