Вы можете добиться этого множеством способов. То, что я делал в прошлом, — это комбинация показа\скрытия ссылок в представлениях и проверки пользователя в контроллере. Я предположил, что у вас есть форма с данными пользователя, которую вы отправляете в пользовательский контроллер.
Ниже я включил контроллер из одного приложения, над которым работал.
Первое, что я делаю, это проверяю, аутентифицирован ли пользователь (для этого мы используем Google, но если вы настроили устройство, вам это не понадобится, и, вероятно, у вас будет собственная аутентификация). Devise создаст объект current_user, если вы вошли в систему, который должен включать ваш атрибут «роль». При создании стандартного пользователя вы можете проверить текущую user.role и просто перенаправить, если current_user.role не равен 1 (я предположил, что 1 означает 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
person
Mark Davies
schedule
17.08.2016