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
Role.rb: classe Rôle
sowmya
je besoin de quelques conseils à ce sujet, je stucked ici depuis 5 jours. – sowmya
Dans ** ability.rb **, remplacez user.role? (: Guest) 'par' user.has_role? (: Guest) '. – Roshan