2010-08-09 5 views
1

J'ai le modèle Post avec le champ published? et un système d'autorisation qui définit la méthode admin? à l'intérieur de ApplicationController.Limiter l'accès à certains éléments de modèle dans Rails 3

Je souhaite limiter l'accès aux publications non publiées et les afficher uniquement à l'administrateur.

J'ai essayé de définir une portée accessible pour renvoyer uniquement les messages publiés aux utilisateurs, mais tous les messages pour l'administrateur.

scope :published, where(:published => true) 

def self.accessible 
    admin? ? all : published 
end 

Le problème est que la méthode admin? ne peut être consulté à l'intérieur du modèle. Quelle est la meilleure façon de mettre en œuvre ce que je veux?

Répondre

2
# option 1 
class Post < ActiveRecord::Base 
    def self.accessible_to user 
    user.admin? ? all : published 
    end 
end 
class PostsController < ApplicationController 
    def index 
    @posts = post.accessible_to current_user 
    end 
end 

# option 2 
class Post < ActiveRecord::Base 
    def self.accessible is_admin 
    is_admin ? all : published 
    end 
end 
class PostsController < ApplicationController 
    def index 
    @posts = post.accessible admin? 
    end 
end 
+0

Bon pour les applications avec plusieurs utilisateurs, mais je n'ai aucun utilisateur enregistré sauf moi en tant qu'administrateur. Je vais chercher une solution plus jolie. –

0

Un moyen, mais pas si abstrait.

def self.published_unless(condition) 
    condition ? all : published 
end 

Post.published_unless(admin?) 
Questions connexes