Vous pouvez réaliser ceci de nombreuses manières. Ce que j'ai fait dans le passé est une combinaison de montrer \ cacher les liens dans les vues et vérifier l'utilisateur dans le contrôleur. J'ai supposé que vous avez un formulaire avec les détails de l'utilisateur que vous soumettez au contrôleur de l'utilisateur.
J'ai inclus un contrôleur d'une application sur laquelle j'ai travaillé ci-dessous.
La première chose que je fais est de vérifier si l'utilisateur est authentifié (nous utilisons google pour cela, mais si vous avez mis en place concevoir vous n'aurez pas besoin de cela et avez probablement votre propre authentification en place). Devise aura créé l'objet current_user si vous avez ouvert une session qui devrait inclure votre attribut "role". Dans l'utilisateur standard, vous pouvez vérifier le user.role actuel et simplement rediriger si current_user.role n'est pas 1 (je suppose que 1 signifie admin).
class UsersController < ApplicationController
# Set the user record before each action
before_action :set_user, only: [:show, :edit, :update, :destroy]
# User must authenticate to use all actions in the users controller
before_filter :authenticate_user!
def create
if current_user.role = 1 then
@user = User.new(user_params)
@user.password = Devise.friendly_token[0,20]
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render action: 'show', status: :created, location: @user }
else
format.html { render action: 'new' }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
else
format.html { redirect_to @user, notice: 'You do not have sufficient rights to set up a new user.' }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
rescue ActiveRecord::RecordNotFound
flash[:notice] = "User record does not exist"
redirect_to users_url
end
end
J'ai ajouté les paramètres de l'utilisateur moi-même, et cela a fonctionné, je pensais que cela hériterait du contrôleur de plan, puis j'ai réalisé que cette classe hérite de la classe de contrôleur d'application. de toute façon merci. mais votre réponse n'est pas encore complète, respond_to manque une balise de fin. éditez-le pour le marquer comme bonne réponse – Opapadaia