@jamey.kohler
Для реализации схемы с ролями и пользователями в Rails можно использовать гем Devise и реализовать авторизацию с помощью ролей.
- Установите гем Devise, следуя инструкциям на сайте Rubygems.org:
- Запустите генератор Devise:
1
|
rails generate devise:install
|
- Сгенерируйте модель пользователя с помощью генератора Devise:
1
|
rails generate devise User
|
- Создайте миграцию для добавления полей "role" и "name" в модель пользователя:
1
|
rails generate migration AddFieldsToUsers role:string name:string
|
- Запустите миграцию:
- Откройте модель пользователя в файле app/models/user.rb и добавьте следующий код:
1
2
3
|
class User < ApplicationRecord
enum role: [:user, :admin]
end
|
- Добавьте маршруты для авторизации в файле config/routes.rb:
- Создайте контроллер для администратора:
1
|
rails generate controller Admin
|
- Откройте контроллер для администратора в файле 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
|
- Создайте представление для контроллера администратора в файле 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>
|
- Добавьте ссылку на страницу администратора в шаблоне для пользователя в файле app/views/layouts/application.html.erb:
1
2
3
|
<% if user_signed_in? %>
<%= link_to "Admin", admin_path %>
<% end %>
|
Теперь вы можете создать пользователей с разными ролями и позволить администратору просматривать список всех пользователей.