User Engineのインストールと設定。

Login Engineによって、なんとかログイン管理できるようになった。さらにEngine系のプラグインを調べてみると、User Engineというプラグインも存在することを知った...。早速、インストールと行きたいところだが、その前に...

User Engineって、何をやってくれるんだろう?

まず、Login Engineは何をしてくれたのか考えてみた。
  • ユーザー情報の登録、照会、修正、削除、ログイン等の環境を提供してくれる。
  • ユーザーがログイン状態かどうかを判断してくれる。
  • ログイン状態ならユーザー情報を教えてくれる。

つまり、ログインしている、していないの二つの情報と、登録されたユーザー情報によって、ユーザーの操作を制限することが可能だった。

User Engineでは、さらにユーザーの権限別に、処理可能な操作を細かく設定することが可能になる。
  • デフォルトではGuest、Admin、User3つのユーザー権限がある。(ファイルのアクセス権限のようなイメージだと思う。)
  • 処理可能な操作は、コントローラーのアクション別に細かく指定できる。

Login Engineでも、規模が小さければ、Admin権限のユーザーを一つ決めて、それ以外はUser権限、ログインしていなければGuest権限のような運用も出来ると思う。でも、それ以上に権限を細かく管理したければ、User Engineが助けてくれることになりそうだ。

インストール

RadRailsの「Railsプラグイン」タブのプルダウンリストにUser Engineは登録されている。選択して、実行ボタンを押すだけだ。

マニュアルを読みましょう!

早速、昨日覚えたことを嬉しくなって書いてみたくなってしまった。(でも、全然自慢できることではないのだが...。)
今までだったら、vender/plugins/user_engine/READMEをRadRailsでクリックして開いて、テキストエディットなんかにコピーして読んでいた...。
本日からは、以下の手順です!

  • RadRailsの「Rakeタスク」タブのプルダウンリストからdoc:enginesを選択して、実行ボタンを押す。
  • MacOSXのファインダーで、~/Railsapp/softwarevook2/doc/plugins/user_engine/index.htmlをクリックする。
  • webブラウザで読み易くなったREADMEとAPIリファレンスを心行くまで読む!(問題は全部英語であること。こればかりは英語に慣れるしかないのだ...。)

作業前の環境づくり

  • 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権限でログインできるようになった!