2013-01-25 55 views
-1
class Ability 
    include CanCan::Ability 
    def initialize(user) 
    @user = user || User.new 

    can :manage, :all 
    can :custom_action, User, role: 'admin' 
    end 
end 

,並鑑於軌,康康舞管理所有與其他角色

if can? :custom_action, @user 
    SHOW SOMETHING 

這一點,如果總是顯示「展示一些東西」,不明白爲什麼它happend。

回答

1

嗯,那是因爲在你的能力課上,你給每個用戶一切權利。

您可能正在尋找這樣的事情:

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

    can :manage, :all 

    # When user is an admin, grant her extra privileges 
    if @user.is_admin? 
    can :custom_action 
    end 
end 

這樣,你定義的能力(通過使用can)有條件

+0

我這種情況下(如果可以:?custom_action,@user (No admin))必須返回false,但它返回true。或者我有些不明白? – Alex808

+0

這個CanCan能力配置生成這樣的東西。 IF(授予任何對象的任何操作)|| (一些條件:custom_action)。所以它總是真正的回報。 – Alex808

0

解決辦法是:

類能力 包括慘慘: :能力 def初始化(用戶) @user = user || User.new

can :manage, :all 
cannot :custom_action, User, role: 'admin' 

末 結束

鑑於:

if can? :custom_action, @user 

return 
    user = true 
    admin = false 

這不是完美的解決方案,但它的作品

相關問題