2012-03-29 11 views
4

ich folgend in meiner Fähigkeit Modell habe:Cancan 2.0 - Beschränkung Berechtigungen auf ein Feld

class Ability 
    include CanCan::Ability 

    #... 

    def superuser_rules 
    can :access, :items  
    cannot :update, :items 
    can :update, :items, :foo_attributes 
    end 

end 

Ich habe eine Form, die den Spiegel nur um die foo_attributes verschachtelte Form angezeigt wird.

Wenn Sie jedoch das Formular senden, wird der Zugriff verweigert, um den Artikel zu aktualisieren.

Gibt es eine Möglichkeit, dies zu umgehen, ohne neue Routen/Aktionen hinzuzufügen?

Vielen Dank!

Antwort

1

Sie können neue Aktionen zum Behandeln dieser "speziellen Attribute" erstellen.

Zuerst können Sie die speziellen Attribute der params aufräumen.

class UserController 
    before_filter :only => [:create, :update] { params[:user].delete(:accepted_at) } 
end 

Dann erstellen Sie eine besondere Aktion ein spezielles Attribut zu ändern:

def accept 
    User.find(params[:user_id]).update_attributes :accepted_at => Time.now 
end 

Jetzt können Sie verschiedene Berechtigungen für create, update und accept Aktionen gesetzt.

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    if user && user.admin? 
     can :accept, User 
    elsif user 
     can :update, User 
    end 
    can :create, User 
    end 
end 

Take a look at this too

Verwandte Themen