2010-11-25 23 views
1

Cela me semble une question facile à laquelle je ne peux tout simplement pas penser.Accéder aux méthodes d'assistance de Devise de CanCan, etc.

Utilisation de Devise pour l'authentification et de CanCan pour l'autorisation sur une nouvelle application Rails 3.

Comment puis-je accéder aux méthodes définies dans ApplicationController dans la classe Ability fournie par CanCan?

a.k.a., quelque chose comme ceci:

class Ability 

    include CanCan::Ability 

    def initialize(user) 

    user ||= User.new # Guest user. 

    can :create, Post if user_signed_in? 

    end 
end 

user_signed_in? est défini dans ApplicationController.

Répondre

3

Cela pourrait ne pas être la réponse que vous vouliez, mais il semble que vous vouliez mélanger des problèmes de code qui ne devraient pas être mélangés.

Est-ce une bonne idée d'accéder à user_signed_in? à l'intérieur de vos règles d'autorisation? ... Puisque l'autorisation ne concerne que ce que quelqu'un peut faire, et ne devrait pas être concernée si cette personne est authentifiée (ou non).

Un filtre avant (before_filter :authenticate_user!) sur votre contrôleur Posts pour vérifier que votre utilisateur est authentifié devrait être suffisant pour atteindre votre objectif; Vos règles d'autorisation peuvent être exécutées aux côtés de la vérification d'authentification, plutôt que d'être mélangé avec son code.

C'est une approche à plusieurs niveaux :-)

+1

Vous voudrez peut-être un utilisateur qui n'a pas signé pour être en mesure de lire une ressource mais pas pouvoir écrire ... C'est plus granuleuse que 'authenticate_user' fournira. –

+0

@PeterDeWeese La question ne stipule pas un utilisateur anonyme avec des droits de lecture sur une ressource en tant qu'exigence. – Scott