Après avoir créé un modèle utilisateur (authentification) à l'aide de devise Ajout de cancancan pour permettre l'autorisation.
Enregistrez le processus sous forme de mémorandum.
Ajoutez la gemme de devise.
・
・
・
gem 'devise'
Installation du bundle.
$bundle install
Installez l'appareil.
$rails generate devise:install
Vérifiez s'il y a un paramètre.
config/environments/development.rb
・
・
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
Ajouter un index de page.
config/routes.rb
Rails.application.routes.draw do
root to: "page#index"
・
・
end
Ajoutez ce qui suit.
app/views/layouts/application.html.erb
<body>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
・
・
</body>
Installer View.
$ rails g devise:views
Ce qui suit est créé.
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
Créez un modèle. Cette fois, nous allons créer un modèle utilisateur.
$ rails g devise user
Le modèle suivant est créé.
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
Les éléments suivants sont créés en même temps.
config/application.rb
config.i18n.default_locale = :ja
Ce qui suit est également fait.
config/routes.rb
ails.application.routes.draw do
devise_for :users
・
・
end
Après avoir créé le modèle, il sera reflété dans la base de données.
rails db:migrate
Puisqu'il n'y a pas encore de vue de l'index de la page, je vais le créer.
$ rails g controller Pages index
En passant, vous pouvez modifier le chemin en créant une étendue dans routes.rb.
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
Cette volonté http://localhost:3000/login La page de connexion s'affiche lorsque vous y accédez.
Bien sûr, la page de connexion est affichée même avec la valeur par défaut / users / sign_in, supprimez-la si nécessaire.
routes.rb
devise_for :users, skip: [:sessions]
Les paramètres de l'appareil sont terminés.
Ensuite, installez cancancan. C'est ce qu'on appelle l'autorisation, selon l'utilisateur Cela signifie accorder des droits d'accès. C'est la différence entre un administrateur système et un utilisateur général.
gem 'cancancan'
Installation du bundle.
$bundle install
La classe Ability est créée.
rails g cancan:ability
Il s'agit de la valeur par défaut de la classe Ability.
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
Changer pour:
# 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 Sans ce qui précède, une erreur s'est produite lors du fonctionnement en tant qu'utilisateur invité.
if user.admin? ← Qu'est-ce que admin? Quelqu'un m'a demandé.
def initialize(user) user ||= User.new can :read, :all Quand le modèle Ability est appelé Si vous êtes connecté en tant que valeur initiale, l'utilisateur est placé dans la variable et si vous n'êtes pas connecté, l'utilisateur invité est affecté à la variable. Ensuite, cela signifie que l'autorisation de lecture est donnée à la variable utilisateur. Cela signifie que tous les utilisateurs ont des privilèges de lecture.
Veuillez noter que l'autorisation de lecture n'est pas liée à CRUD. Cela signifie que la page peut être lue, cela ne signifie pas que vous pouvez l'obtenir, et vous pouvez le faire en programmant la méthode create séparément.
if user.admin?
can :manage, :all
Il s'agit d'un programme à exécuter si true est entré dans la colonne admin créée dans le modèle User. En d'autres termes, il s'agit d'un utilisateur avec des privilèges d'administrateur.
Ajoutez ce qui suit à la page d'affichage de l'index de page.
app/views/pages/index.html.erb
<h1>Pages#index</h1>
<p>Find me in app/views/pages/index.html.erb</p>
<%= link_to "Effacer", 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 %> Si l'utilisateur actuellement connecté dispose d'une autorisation de mise à jour, le contenu sera affiché.
<% if can? :read, current_user %> Si l'utilisateur connecté a l'autorisation de lecture, le contenu sera affiché.
Cela signifie que · · ·
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
Dans ce qui précède, l'administrateur n'est pas dans le modèle utilisateur, que dois-je faire? je pense que ce sera Il sera ajouté.
$rails g migration AddAdminToUser admin:boolean
Ce qui suit est créé par défaut par défaut: ajoutez "faux".
Sur la page d'affichage, ne créez pas une vue qui sélectionne admin, mais créez par défaut un utilisateur avec admin = false. Ici, l'administrateur est créé intentionnellement du côté de la gestion.
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
Émigrer
$rails g migrate
Vérifiez le schéma de base de données.
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/ Créez un utilisateur général avec.
utilisateur admin Créez comme suit.
$user =User.new(id: xx, email: "xxx@yyy", password: "xxxx", admin: true)
Ceci termine la procédure, En fait pour les utilisateurs généraux et les utilisateurs administrateurs respectivement Accédez à l'index de la page.
Étant donné que les utilisateurs généraux n'ont que les droits de lecture, la lecture peut être affichée.
L'utilisateur Admin a des privilèges de gestion (a tous les privilèges), donc la lecture et la mise à jour peuvent être affichées respectivement.
Recommended Posts