Day 16:devise で管理者を追加する
/
Environment
- Ubuntu 18.04
- Ruby:2.51
- Rails: 5.2.2
- gem
devise
: ログインなどの機能用- `kaminari: pagination
- gem
- DB: PostgreSQL
実作業
テーブルにadminカラム追加
# rails g migration Addカラム名Toテーブル名 カラム定義rails g migration AddAdminToStudent admin:boolean
boolean型
真理値の「真 = true」と「偽 = false」という 2 値をとるデータ型のこと。Ruby では偽は false と nil で、それ以外が true になる。言語や DB によっては、1 と 0 だったり、違うので注意。
マイグレーションファイルを編集
boolean 型と定義する際は、デフォルト値を設定しないといけない。admin のデフォルト値に引数 false を渡し、デフォルトでは admin 権限がない、と指定する。
class AddAdminToStudent < ActiveRecord::Migration[5.2] def change add_column :students, :admin, :boolean,default: false endend
rails db:migrate
admin権限を確認付与
stu = Student.find(1)stu.admin?=>falsestu.admin = truestu.savestu.admin?=>true
admin 属性が追加され、また admin?メソッドを使用できるようになっている。
adminのみが全データを見られるようにする
admin 以外は、自分のデータしか見られないようにしたい。
def index if current_student.admin? @students = Student.page params[:page] else @student = current_student end end
<tbody> <% if current_student.admin? %> <% @students.each do |student| %> <tr> <td><%= student.name %></td> <td><%= student.email %></td> <td><%= display_name student.gender %></td> <td><%= display_age student.age %></td> <td><%= student.opinion %></td> <td><%= link_to 'Show', student %></td> <td><%= link_to 'Edit', edit_student_path(student) %></td> <td><%= link_to 'Destroy', student, method: :delete, data: { confirm: 'Are you sure?' } %></td> <td><%= link_to 'New Exam Result', new_exam_result_path(student_id: student.id) %></td> <td><%= link_to 'New Club Student', new_club_student_path(student_id: student.id) %></td> </tr> <% end %> <% else %> <tr> <td><%= @student.name %></td> <td><%= @student.email %></td> <td><%= display_name @student.gender %></td> <td><%= display_age @student.age %></td> <td><%= @student.opinion %></td> <td><%= link_to 'Show', @student %></td> <td><%= link_to 'Edit', edit_student_path(@student) %></td> <td><%= link_to 'Destroy', @student, method: :delete, data: { confirm: 'Are you sure?' } %></td> <td><%= link_to 'New Exam Result', new_exam_result_path(student_id: @student.id) %></td> <td><%= link_to 'New Club student', new_club_student_path(student_id: @student.id) %></td> </tr> <% end %> </tbody></table><% if current_student.admin? %> <%= paginate @students %><% end %>