2016-08-17 4 views
1

Я использую Devise, и я хочу разрешить Только Администраторы для создания новых пользователей. Я уже рассмотрел ответ This, но он выглядит устаревшим. Я пробовал так много возможных ответов, но ничего не получилось. Я ищу немного подробный ответ, поскольку я все еще новичок.Как разрешить ТОЛЬКО админам создавать новых пользователей?

Администраторы помечены логическим значением в таблице пользователей Я стараюсь, чтобы вещи были минимальными.

ответ

1

Вы можете достичь этого множества способов. То, что я делал в прошлом, представляет собой комбинацию отображения \ скрытия ссылок в представлениях и проверки пользователя в контроллере. Я предположил, что у вас есть форма с подробными сведениями пользователя, которые вы отправите пользовательскому контроллеру.

Я включил контроллер из одного приложения, над которым работал ниже.

Первое, что я делаю, это проверить, проверен ли пользователь на аутентификацию (мы используем Google для этого, но если вы настроили программу, вам это не понадобится и, возможно, ваша собственная проверка подлинности). Devise создаст объект current_user, если вы вошли в систему, в который должен быть включен атрибут «role». В стандартном пользовательском создании вы можете проверить текущий 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 
+0

Я сам добавил параметры пользователя, и это сработало, я думал, что он наследует его от контроллера разработки, и я понял, что этот класс наследуется от класса контроллера приложения. в любом случае спасибо вам. но ваш ответ еще не завершен, response_to отсутствует конечный тег. отредактируйте его, чтобы отметить его как правильный ответ – Opapadaia

1

Ну, самый простой способ сделать это, чтобы добавить before_action к вашему пределу пользователи КОНТРОЛЛЕР создавать и редактировать и anyother действие вы хотите конкретных критериев

before_action :create_user , only: [:edit , :update , :new, :correct_user] 

и затем вы можете определить создать пользовательский приватный метод

def create_user 

    @user=User.find(params[:id]) 
    redirect_to @user unless @user.criteria == criteria 
    end 

Надеюсь, это то, что вы ищете. Если нет, прокомментируйте с подробной информацией.

+0

но у разработчика нет пользовательского контроллера – Opapadaia

+0

Это может помочь вам найти, где находится контроллер. http://stackoverflow.com/questions/6234045/how-do-you-access-devise-controllers –

+0

каждый раз, когда я нажимаю на ссылку_ для создания нового пользователя, он возвращается с сообщением об ошибке «Вы уже вошли» – Opapadaia

1
# 
# In Users_Controller 
# 
before_action :check_user_role , only: [:edit , :update , :new, :create] 

def check_user_role 
    redirect_to home_path if current_user.role != "Your Role" 
end 
+0

все еще не работает, он говорит, что «вы уже вошли» – Opapadaia

+0

Какая ошибка у вас сейчас? –

Смежные вопросы

 Смежные вопросы