2017-08-22 3 views
0

Mon exigence est, je dois pouvoir m'inscrire en tant que super administrateur/administrateur/invité et après cela, je dois créer un exemple de projet en tant que super administrateur/administrateur/invité .Redirection d'utilisateur basée sur le rôle dans ruby ​​sur rails

Super administrateur ont toutes les autorisations comme créer, afficher, modifier, supprimer. Admin ont des permissions comme modifier, voir et invité doit avoir seulement créer un accès.

Mais, dans mon application, Guest obtient également toutes les autorisations comme créer, mettre à jour, supprimer sur la liste des projets.

Pour résoudre ce problème,

Les pierres précieuses que j'ai utilisé sont:

gem 'devise' 

gem 'cancancan', '~> 1.10' 

gem 'rolify' 

pour la redirection basée sur le rôle est dans élaborer/enregistrement/new.html.erb:

une fois, je crée un nouvel utilisateur, (en sélectionnant les boutons radio) j'ai pu enregistrer sa valeur 1 (pour super administrateur)/2 (Admin)/3 (Invité) dans la base de données

app/modèles/ability.rb:

class Ability 
    include cancan::Ability 
    def initialize(user) 
    user ||= User.new 

    if user.has_role?(:super_admin) 
     can :manage, :all 
    elsif user.has_role?(:admin) 
     can :create, Project 
     can :update, Project do |project| 
     project.ongoing? 
     end 
     can :read, Project 
    elsif user.role?(:guest) 
     can :create, Project 
    end 

    end 
end 

app/modèles/role.rb:

class Role < ActiveRecord::Base 
    resourcify 
    has_and_belongs_to_many :users, :join_table => :users_roles 

    belongs_to :resource, 
      :polymorphic => true, 
    validates :resource_type, 
      :inclusion => { :in => Rolify.resource_types }, 
      :allow_nil => true 

    scopify 
end 

app/modèles/users.rb:

class User < ActiveRecord::Base 
    rolify :role_cname => 'Usertype' 
    devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable 
    has_many :projects, dependent: :destroy 

    def super_admin? 
    has_role?(:super_admin) 
    end 

    def admin? 
    has_role?(:admin) 
    end 

    def guest? 
    has_role?(:guest) 
    end 
end 
+0

Role.rb: classe Rôle sowmya

+0

je besoin de quelques conseils à ce sujet, je stucked ici depuis 5 jours. – sowmya

+0

Dans ** ability.rb **, remplacez user.role? (: Guest) 'par' user.has_role? (: Guest) '. – Roshan

Répondre

0

Eh bien pour les débutants dans votre dernière déclaration que vous appelez:

elsif user.role?(:guest) 

alors que dans les autres que vous appelez

elsif user.has_role? 

Toutes les questions portent ci-dessous. Puisque je ne peux pas encore commenter.

+0

J'ai changé user.role? (: Guest) en user.has_role? (: Guest) .... encore, pas de différence .. :( – sowmya

+0

Il semble que vos rôles ne sont pas réglés correctement, car CanCanCan suppose si vous n'avez pas accès à un modèle, dans votre exemple Project, il définit vraisemblablement l'accès à ce modèle à (impossible de: gérer le projet) Pourriez-vous poster votre code du contrôleur d'application? –

+0

class ApplicationController sowmya