User Engineのインストールと設定。
Login Engineによって、なんとかログイン管理できるようになった。さらにEngine系のプラグインを調べてみると、User Engineというプラグインも存在することを知った...。早速、インストールと行きたいところだが、その前に...
User Engineって、何をやってくれるんだろう?
まず、Login Engineは何をしてくれたのか考えてみた。
- ユーザー情報の登録、照会、修正、削除、ログイン等の環境を提供してくれる。
- ユーザーがログイン状態かどうかを判断してくれる。
- ログイン状態ならユーザー情報を教えてくれる。
つまり、ログインしている、していないの二つの情報と、登録されたユーザー情報によって、ユーザーの操作を制限することが可能だった。
User Engineでは、さらにユーザーの権限別に、処理可能な操作を細かく設定することが可能になる。
- デフォルトではGuest、Admin、User3つのユーザー権限がある。(ファイルのアクセス権限のようなイメージだと思う。)
- 処理可能な操作は、コントローラーのアクション別に細かく指定できる。
Login Engineでも、規模が小さければ、Admin権限のユーザーを一つ決めて、それ以外はUser権限、ログインしていなければGuest権限のような運用も出来ると思う。でも、それ以上に権限を細かく管理したければ、User Engineが助けてくれることになりそうだ。
マニュアルを読みましょう!
早速、昨日覚えたことを嬉しくなって書いてみたくなってしまった。(でも、全然自慢できることではないのだが...。)
今までだったら、vender/plugins/user_engine/READMEをRadRailsでクリックして開いて、テキストエディットなんかにコピーして読んでいた...。
本日からは、以下の手順です!
作業前の環境づくり
- Login Engineのインストールと設定で作業が完了している。
- データベースはLogin Engineインストール前の状態に戻しておく。
- RadRailsの「Rakeタスク」タブで、プルダウンメニューからdb:migrate:engines:login_engineを選択する。
- 右側の項目に「VERSION=000」と入力して、実行ボタンを押す。
vender/plugins/user_engine/db/migrate/001_initial_schema.rbの修正
remove_tableをdrop_tableに変更した。(自分の環境では、remove_tableではエラーとなってしまい、マイグレションのバージョンダウンができなかったので...。やり直したい時に、結構、悩んだので書いておく。)
class InitialSchema < ActiveRecord::Migration ...(途中省略)... def self.down drop_table UserEngine.config(:permission_table) drop_table UserEngine.config(:permission_role_table) drop_table UserEngine.config(:user_role_table) drop_table UserEngine.config(:role_table) end end
設定ファイル
config/environment.rbへの追記
...(途中省略)... # Include your application configuration below module LoginEngine config :salt, "MY_KEY" config :email_from, 'MY_USER_NAME@mac.com' end module UserEngine config :admin_login, "yamada" config :admin_email, "taro@gmail.com" config :admin_password, "dokabenn" end Engines.start :login, :user UserEngine.check_system_roles
app/controllers/application.rbへの追記
# Filters added to this controller will be run for all controllers in the application. # Likewise, all the methods added will be available for all controllers. require 'login_engine' class ApplicationController < ActionController::Base include LoginEngine include UserEngine helper :user model :user #before_filter :login_required before_filter :authorize_action end
app/helpers/application_helper.rbへの追記
# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper
include LoginEngine
include UserEngine
end
app/models/user.rbの削除
- Login Engineの時に闇雲にコピーしたが、特にカスタマイズの必要性がないので削除した。
- User Engineでも定義されているので、ファイルを残しておくなら、User Engineの内容に更新しないと、この後の処理が正常に機能しない。
app/views/layouts/user.rhtmlへの追記
READMEに書いてある通り、5行目に<%= engine_javascript "user_engine" %>を1行追加した。
<html> <head> <title>Softwares: <%= controller.action_name %></title> <%= engine_stylesheet "user_engine" %> <%= engine_javascript "user_engine" %> </head> <body> <% for name in [:notice, :warning, :message] %> <%= "<p style=\"color: green\">#{flash[name]}</p>" if flash[name] %> <% end %> <%= yield %> </body> </html>
データベースへのテーブルの追加
Login Engine、User Engineで必要なテーブルの追加を、マイグレーションで一気に行う。
- RadRailsの「Rakeタスク」タブで、プルダウンメニューからdb:migrate:enginesを選択する。(なければ直接入力する)
- 右側の項目は空欄のまま、実行ボタンを押す。
そうすると...
- 以下のテーブルが追加される。
テーブル名 | 内容 |
---|---|
users | ユーザー |
roles | 権限(Guest、Admin、User) |
permissions | 許可される処理(コントローラごとのアクションで指定) |
users_roles | ユーザーと権限の対応付け |
permissions_roles | 許可される処理と権限の対応付け |
デフォルト権限と管理者ユーザーの追加
- RadRailsの「Rakeタスク」タブで、プルダウンメニューからbootstrapを選択する。(なければ直接入力する)
- 右側の項目は空欄のまま、実行ボタンを押す。
そうすると...
- コントローラごとのアクションが抽出されて、permissionsテーブルに登録される。
-
- 今後アクションが追加、削除された時はその都度、rake bootstrapの処理が必要らしい。
-
- rolesテーブルにデフォルト権限のGuest、Admin、Userが追加される。
- usersテーブルに、environment.rbで設定したadmin権限ユーザーが登録される。
ログインID | yamada |
---|---|
メールアドレス | taro@gmail.com |
パスワード | dokabenn |
サーバーの起動
sessionが残っていると、正常に動作しないことがあるので、念のため以下の手順でサーバーを起動する。
- サーバーが起動していたら、一旦、ストップする。
- RadRailsの「Rakeタスク」タブで、プルダウンメニューからtmp:clearを選択して、実行ボタンを押す。(tmpフォルダの中身がクリアされる)
- サーバーを起動する。
これで、admin権限でログインできるようになった!