2010-07-09 9 views
0

J'ai une application rails et je veux gérer l'accès à l'application de manière contrôlée. L'utilisateur client aurait accès à certaines vues uniquement dans l'application, tandis que l'administrateur peut accéder à n'importe quelle page. À l'avenir, je pourrais également ajouter quelques semi-administrateurs qui pourraient avoir accès à un sous-ensemble de pages auxquelles l'administrateur aurait eu accès. J'ai déjà une authentification de connexion mais je veux une meilleure solution pour contrôler l'accès des utilisateurs à certaines pages de mon application.Accès contrôlé et routage

+1

alors qu'est-ce que vous demandez? –

+0

@Mark - Je sais comment utiliser before_login et utiliser l'authentification de connexion de base. Ce que je veux faire est: Disons que j'ai un acheteur, un client et un modèle de fournisseur. Mon administrateur peut voir changer tous les modèles à travers des vues créées par des échafaudages. Mon semi-administrateur ne peut accéder qu'au modèle client. Mon client ne peut voir que son modèle d'utilisateur et les données que je lui montre. –

Répondre

2

Il semble que vous avez les bases de l'authentification vers le bas, mais juste besoin d'un basé sur les rôles solution d'autorisation. Vous pouvez jeter un oeil à CanCan, cela fonctionne bien avec la plupart des paquets d'authentification. Il y a un bon railscast sur comment l'utiliser.

Espérons que cela aide.

2

utilisation before_filter

users_controller.rb

class UsersController < ApplicationController 
    before_filter :login_required, :except=>[:show] 
    before_filter :required_admin, :only=>[:all_users] 

    def show 

    end 

    def all_users 

    end 

    def edit 

    end 

    end 

application_controller.rb

class ApplicationController < ActionController::Base 

    def current_user 
     session[:user] 
    end 

    def login_required 
     if current_user 
     return true 
     else 
     flash[:notice]='Please login to continue.' 
     redirect_to :controller => "logins" 
     end 
    end 

    def required_admin 
     if current_user && current_user.is_admin? #check here if current user is admin or not 
     return true 
     else 
     flash[:notice]='Please login as admin.' 
     redirect_to :controller => "logins" 
     end 
    end 
    end 
  1. méthode Show peut voir personne avec & sans connexion

  2. seul administrateur peut voir all_users méthode

  3. méthode d'édition peut voir tout utilisateur de connexion (c.-à-utilisateur admin)

+0

J'ai déjà fait ça. Ce que je veux dire, c'est que j'ai un acheteur, un client et un modèle de fournisseur. Mon administrateur peut voir changer tous les modèles à travers des vues créées par des échafaudages. Mon semi-administrateur ne peut accéder qu'au modèle client. Mon client ne peut voir que son modèle d'utilisateur et les données que je lui montre. –

+0

Les vues ne sont pas personnalisées avec les modèles, cela dépend donc de la façon dont vous présentez votre application. Si vous le souhaitez, vous pouvez, par exemple, avoir une vue 'show' dans laquelle se trouve une branche conditionnelle qui redirige vers' show_admin' ou 'show_user' en fonction de qui l'affiche. – Karl