Как реализовать схему с ролями и пользователями в rails?

Пользователь

от jamey.kohler , в категории: Ruby , год назад

Как реализовать схему с ролями и пользователями в rails?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от greyson , год назад

@jamey.kohler 

Для реализации схемы с ролями и пользователями в Rails можно использовать гем Devise и реализовать авторизацию с помощью ролей.

  1. Установите гем Devise, следуя инструкциям на сайте Rubygems.org:
1
gem 'devise'


  1. Запустите генератор Devise:
1
rails generate devise:install


  1. Сгенерируйте модель пользователя с помощью генератора Devise:
1
rails generate devise User


  1. Создайте миграцию для добавления полей "role" и "name" в модель пользователя:
1
rails generate migration AddFieldsToUsers role:string name:string


  1. Запустите миграцию:
1
rails db:migrate


  1. Откройте модель пользователя в файле app/models/user.rb и добавьте следующий код:
1
2
3
class User < ApplicationRecord
  enum role: [:user, :admin]
end


  1. Добавьте маршруты для авторизации в файле config/routes.rb:
1
devise_for :users


  1. Создайте контроллер для администратора:
1
rails generate controller Admin


  1. Откройте контроллер для администратора в файле app/controllers/admin_controller.rb и добавьте следующий код:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
class AdminController < ApplicationController
  before_action :authenticate_user!
  before_action :check_admin

  def index
    @users = User.all
  end

  private

  def check_admin
    unless current_user.admin?
      redirect_to root_path, alert: "You are not authorized to access this page."
    end
  end
end


  1. Создайте представление для контроллера администратора в файле app/views/admin/index.html.erb:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<h1>Admin Dashboard</h1>

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Email</th>
      <th>Role</th>
    </tr>
  </thead>
  <tbody>
    <% @users.each  do |user| %>
      <tr>
        <td><%= user.name %></td>
        <td><%= user.email %></td>
        <td><%= user.role.capitalize %></td>
      </tr>
    <% end %>
  </tbody>
</table>


  1. Добавьте ссылку на страницу администратора в шаблоне для пользователя в файле app/views/layouts/application.html.erb:
1
2
3
<% if  user_signed_in? %>
  <%= link_to "Admin", admin_path %>
<% end  %>


Теперь вы можете создать пользователей с разными ролями и позволить администратору просматривать список всех пользователей.