Nach dem Erstellen eines Benutzermodells (Authentifizierung) mit devise Cancancan hinzugefügt, um die Autorisierung zu ermöglichen.
Protokollieren Sie den Prozess als Memorandum.
Fügen Sie den Edelstein hinzu.
・
・
・
gem 'devise'
Bundle-Installation.
$bundle install
Installieren Sie das Gerät.
$rails generate devise:install
Überprüfen Sie, ob eine Einstellung vorhanden ist.
config/environments/development.rb
・
・
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
Seitenindex hinzufügen.
config/routes.rb
Rails.application.routes.draw do
root to: "page#index"
・
・
end
Fügen Sie Folgendes hinzu.
app/views/layouts/application.html.erb
<body>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
・
・
</body>
Installieren Sie View.
$ rails g devise:views
Folgendes wird erstellt.
app/views/devise/unlocks/new.html.erb app/views/devise/shared/_links.html.erb app/views/devise/shared/_error_messages.html.erb app/views/devise/sessions/new.html.erb app/views/devise/registrations/new.html.erb app/views/devise/registrations/edit.html.erb app/views/devise/passwords/new.html.erb app/views/devise/passwords/edit.html.erb app/views/devise/mailer/unlock_instructions.html.erb app/views/devise/mailer/reset_password_instructions.html.erb app/views/devise/mailer/password_change.html.erb app/views/devise/mailer/email_changed.html.erb app/views/devise/mailer/confirmation_instructions.html.erb app/views/devise/confirmations/new.html.erb
Erstellen Sie ein Modell. Dieses Mal erstellen wir ein Benutzermodell.
$ rails g devise user
Das folgende Modell wird erstellt.
app/models/user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
end
Folgendes wird gleichzeitig erstellt.
config/application.rb
config.i18n.default_locale = :ja
Das Folgende wird ebenfalls gemacht.
config/routes.rb
ails.application.routes.draw do
devise_for :users
・
・
end
Nach dem Erstellen des Modells wird es in der Datenbank angezeigt.
rails db:migrate
Da es noch keine Ansicht des Seitenindex gibt, werde ich sie erstellen.
$ rails g controller Pages index
Nebenbei können Sie den Pfad ändern, indem Sie einen Bereich in route.rb erstellen.
routes.rb
devise_scope :user do
get 'login', to: 'devise/sessions#new'
post 'login', to: 'devise/sessions/#create'
delete 'logout', to: 'devise/sessions#destroy'
end
Dieser Wille http://localhost:3000/login Die Anmeldeseite wird beim Zugriff angezeigt.
Natürlich wird die Anmeldeseite auch mit dem Standardwert / users / sign_in angezeigt. Löschen Sie sie daher bei Bedarf.
routes.rb
devise_for :users, skip: [:sessions]
Die Geräteeinstellungen sind abgeschlossen.
Als nächstes installieren Sie cancancan. Dies wird je nach Benutzer als Autorisierung bezeichnet Es bedeutet, Zugriffsrechte zu gewähren. Dies ist der Unterschied zwischen einem Systemadministrator und einem allgemeinen Benutzer.
gem 'cancancan'
Bundle-Installation.
$bundle install
Die Fähigkeitsklasse wird erstellt.
rails g cancan:ability
Dies ist die Standardeinstellung für die Fähigkeitsklasse.
class Ability
include CanCan::Ability
def initialize(user)
# Define abilities for the passed in user here. For example:
#
# user ||= User.new # guest user (not logged in)
# if user.admin?
# can :manage, :all
# else
# can :read, :all
# end
#
# The first argument to `can` is the action you are giving the user
# permission to do.
# If you pass :manage it will apply to every action. Other common actions
# here are :read, :create, :update and :destroy.
#
# The second argument is the resource the user can perform the action on.
# If you pass :all it will apply to every resource. Otherwise pass a Ruby
# class of the resource.
#
# The third argument is an optional hash of conditions to further filter the
# objects.
# For example, here the user can only update published articles.
#
# can :update, Article, :published => true
#
# See the wiki for details:
# https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
end
end
Ändern:
# frozen_string_literal: true
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
can :read, :all
if user.admin?
can :manage, :all
end
# Define abilities for the passed in user here. For example:
#
# user ||= User.new # guest user (not logged in)
# if user.admin?
# can :manage, :all
# else
# can :read, :all
# end
#
# The first argument to `can` is the action you are giving the user
# permission to do.
# If you pass :manage it will apply to every action. Other common actions
# here are :read, :create, :update and :destroy.
#
# The second argument is the resource the user can perform the action on.
# If you pass :all it will apply to every resource. Otherwise pass a Ruby
# class of the resource.
#
# The third argument is an optional hash of conditions to further filter the
# objects.
# For example, here the user can only update published articles.
#
# can :update, Article, :published => true
#
# See the wiki for details:
# https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
end
end
user ||= User.new Ohne das oben Gesagte ist beim Betrieb als Gastbenutzer ein Fehler aufgetreten.
if user.admin? ← Was ist admin? Ich wurde gefragt.
def initialize(user) user ||= User.new can :read, :all Wenn das Fähigkeitsmodell aufgerufen wird Wenn Sie standardmäßig angemeldet sind, fügen Sie diesen Benutzer in die Variable ein. Wenn Sie nicht angemeldet sind, wird der Gastbenutzer der Variablen zugewiesen. Dann bedeutet dies, dass der Benutzervariablen Leseberechtigung erteilt wird. Dies bedeutet, dass alle Benutzer über Leseberechtigungen verfügen.
Bitte beachten Sie, dass die Leseberechtigung nicht an CRUD gebunden ist. Dies bedeutet, dass die Seite gelesen werden kann, nicht, dass Sie sie erhalten können, und Sie können dies tun, indem Sie die Erstellungsmethode separat programmieren.
if user.admin?
can :manage, :all
Dies ist ein Programm, das ausgeführt werden soll, wenn true in die im Benutzermodell erstellte Admin-Spalte eingegeben wird. Mit anderen Worten, es ist ein Benutzer mit Administratorrechten.
Fügen Sie dem Index Seite anzeigen von Seite # Folgendes hinzu.
app/views/pages/index.html.erb
<h1>Pages#index</h1>
<p>Find me in app/views/pages/index.html.erb</p>
<%= link_to "Löschen", logout_path, method: :delete %>
<% if can? :update, current_user %>
<h1>update</h1>
<% end %>
<% if can? :read, current_user %>
<h1>read</h1>
<% end %>
<% if can? :update, current_user %> Wenn der aktuell angemeldete Benutzer über eine Aktualisierungsberechtigung verfügt, wird der Inhalt angezeigt.
<% if can? :read, current_user %> Wenn der angemeldete Benutzer über eine Leseberechtigung verfügt, wird der Inhalt angezeigt.
Es bedeutet, dass · · ·
db/schema.rb
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.boolean "admin", default: false
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end
Oben befindet sich admin nicht im Benutzermodell. Was soll ich tun? Ich denke, es wird Es wird hinzugefügt.
$rails g migration AddAdminToUser admin:boolean
Folgendes wird standardmäßig erstellt Standard: Fügen Sie "false" hinzu.
Erstellen Sie auf der Ansichtsseite keine Ansicht, in der admin ausgewählt ist, sondern erstellen Sie standardmäßig einen Benutzer mit admin = false. Hier wird der Administrator absichtlich auf der Managementseite erstellt.
db/migrate/20200522114428_add_admin_to_users.rb
class AddAdminToUsers < ActiveRecord::Migration[6.0]
def change
add_column :users, :admin, :boolean, default: "false"
end
end
Wandern
$rails g migrate
Überprüfen Sie das DB-Schema.
db/schema.rb
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.boolean "admin", default: false
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end
http://localhost:3000/ Erstellen Sie einen allgemeinen Benutzer mit.
Administrator Erstellen Sie wie folgt.
$user =User.new(id: xx, email: "xxx@yyy", password: "xxxx", admin: true)
Damit ist der Vorgang abgeschlossen. Eigentlich für allgemeine Benutzer bzw. Administratoren Gehen Sie zum Seitenindex.
Da allgemeine Benutzer nur Leseberechtigung haben, kann Lesen angezeigt werden.
Der Administrator verfügt über Verwaltungsberechtigungen (verfügt über alle Berechtigungen), sodass Lese- und Aktualisierungsrechte angezeigt werden können.
Recommended Posts