2010-05-27 6 views
2

J'utilise authlogic (2.1.3) et declarative_authorization (0.4.1) pour contrôler l'accès à mon application. Toutes les autorisations fonctionnent comme prévu excepté les utilisateurs auxquels est affecté le rôle Editeur ne peuvent pas modifier leurs paramètres de profil (current_user fourni par authlogic) (partie du modèle User).Autorisation déclarative du modèle d'utilisateur 'if_attribute'

Le rôle 'Invité' fonctionne comme prévu, tout comme le 'Administrateur'. J'utilise un utilisateur (nommé 'bob') auquel le rôle d'éditeur a été assigné. Vérifié dans la base de données et dans une session IRB.

contenu pertinent du fichier authorization_rules.rb:

role :guest do 

    # allow anonymous 'user' to create an account 
    has_permission_on :users, :to => [:new, :create] 

    # allow anonymous 'user' 'read-only' actions 
    has_permission_on :users, :to => [:index, :show] 

    end 

    role :editor do 

    # allow authenticated User to see other users 
    has_permission_on :users, :to => [:index, :show] 

    # allow authenticated User to update profile; doesn't work 
    has_permission_on :user, :to => [:edit, :update] do 
     if_attribute :user => is { user } 
    end 

    end 

    role :administrator do 

    # 'full control'  
    has_permission_on :users, :to => [:index, :show, :new, :create, :edit, :update, :destroy] 

    end 

Je crois que le problème est lié à l'if_attribute: user => {user}. if_attribute semble suggérer que: l'utilisateur doit être un attribut (ou une propriété) de la chose en cours de test, dans ce cas un modèle User, plutôt que d'être la chose elle-même. J'ai cherché une méthode if_self ou quelque chose de similaire, mais je n'ai rien vu.

L'aide est appréciée.

Répondre

3

Trouvé la solution; il s'est lié à la méthode if_attribute comme je le soupçonnais. Le paramètre de rôle correct est:

role :editor do 

    # allow authenticated user to see other users 
    has_permission_on :users, :to => [:index, :show] 

    # allow authenticated user to update profile 
    has_permission_on :users, :to => [:edit,:update] do 
    if_attribute :id => is { user.id } 
    end 

end 
Questions connexes