user_engineを組み込む
CSVファイルをアップロードして、閲覧制限をかけて表示する、という基本的な機能が実装できたので、これからは運用上必要なユーザー権限を設定しようと思う。自分の中では、権限管理と言えば、以前Softwarebookで利用したuser_engineなのだ。早速、インストールの開始。
-
-
- user_engineについては、以前の記事「User Engineのインストールと設定。」あたりが、多少参考になるかも。
-
作業手順
- 以前に日本語化したuser_engineを、vender/pluginsフォルダにコピーした。
- config/environment.rbへの追記
- app/controllers/application.rbへの追記
- app/helpers/application_helper.rbへの追記
- app/views/layouts/user.rhtmlへの追記
- app/controllers/user_controller.rbへの追記
- app/models/user.rbへの追記
- Rakeタスク db:migrate:engines VERSION=0の実行
- Rakeタスク db:migrate:enginesの実行
- Rakeタスク bootstrapの実行
- Rakeタスク tmp:clearを実行
- WEBrickサーバーを再起動
久々に使ってみた注意点
久々にuser-engineを使ってみると、忘れていることが多々あり、少々悩んでしまったのでメモ。
- すでにlogin_engineを利用中だと、login_engineのカスタマイズのため、app/controllers/user_controller.rb、app/models/user.rbを追加済みのことが多い。その場合、user_engineにも同じファイル名のコードが存在するので、それぞれのコードを合併しておく必要がある。(user_engineのコードをコピーして、login_engineのコードの下に貼り付けた。)
- db:migrate:engines VERSION=0を実行して、一度login_engineも含めてデータベースを初期化してしまった方が、無駄に悩まなくて済む。
- user_engineの挙動がおかしいと思った時は、Rakeタスクからtmp:clearを実行して、サーバーを再起動すると解決するかもしれない。
- 最初はAdmin権限でログインして、User権限のアクセス権限(Permission)を正しく設定する必要がある。初期状態のまま新規ユーザーを追加しても、正常にアクセスできない。
- ログインしても、csvsやdisplaysコントローラーのアクセス権が一つも無いからだ。
- ここではとりあえず、csvsとdisplaysコントローラーの全てのアクセス権を有効にしておいた。
- 新たにメソッドを定義したら、必ず、Rakeタスクから、bootstrapを実行する。
追記したコードの一覧
- 2) config/environment.rb
$KCODE = 'u' require 'jcode' # Be sure to restart your web server when you modify this file. ...(途中省略)... # Include your application configuration below require 'gettext/rails' ENV['MSGMERGE_PATH'] = '/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/i386/bin/msgmerge' module LoginEngine config :salt, "zarigani" config :use_email_notification, false config :changeable_fields, [ 'firstname', 'lastname' ] end module UserEngine config :admin_login, "zarigani" config :admin_email, "zarigani.watch@gmail.com" config :admin_password, "zarigani" end Engines.start :login, :user UserEngine.check_system_roles
- 3) 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 init_gettext "csv_server" include LoginEngine include UserEngine helper :user model :user # before_filter :login_required before_filter :authorize_action end
- 4) 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
- 5) app/views/layouts/user.rhtml
- 以下の内容で、ファイルを新規追加した。
<html> <head> <title><%= controller.controller_name %>: <%= controller.action_name %></title> <%# スタイルシートは、後の設定が優先される %> <%= stylesheet_link_tag 'scaffold' %> <%= engine_stylesheet 'login_engine' %> <%= 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>
- 6) app/controllers/user_controller.rb
- login_engineとuser_engineのコードを合併した。(コードは長いので省略)
- 7) app/models/user.rb
- login_engineとuser_engineのコードを合併した。
class User < ActiveRecord::Base include LoginEngine::AuthenticatedUser include UserEngine::AuthorizedUser untranslate :salt, :salted_password, :verified, :role, :security_token, :token_expiry, :created_at, :updated_at, :logged_in_at, :deleted, :delete_after N_("User|Password") # Returns the full name of this user. def fullname _("%{firstname} %{lastname}") % {:firstname => firstname, :lastname => lastname} end end
以上で、LoginEngine、UserEngineとも、正常に機能するようになった!