login_engineとauth_generator
login_engineとauth_generatorの比較
http://api.rails-engines.org/login_engine/files/vendor/plugins/login_engine/README.html
http://penso.info/rails/auth_generator
同じ機能
login, signup, forgot passwordなどの画面を提供する。
(login_engineはメールを使うかどうかを選べるが) signupのメールに示されたURLにアクセスして初めてユーザが有効になる。
違う機能
auth_generatorには管理者用の画面がある(英語のみ)が、login_engineにはない。
auth_generatorにはユーザにdomains(=権限?)があるが、login_engineにはない。
auth_generatorはgemでインストール。pluginではない。実際に動作するMVCのクラスは$RAILS_ROOT/app以下に生成される。
login_engineはengineの一種。pluginとして配布されている。実際に動作するMVCのクラスは$RAILS_ROOT/vendor/plugins/login_engineにある。
Controllerでのアクセス制限
auth_generatorでは以下のように書く
def list require_auth 'admin' ・・・ end
ログインされていない場合はログイン画面に、権限が足りない場合はアクセスできないことを示す画面に遷移する。
login_engineでは
class BookController < ApplicationController before_filter :login_required, :only => [:myaccount, :changepassword] before_filter :login_required, :except => [:index]
という感じ。ユーザにroleという属性はあるけど、なんか使われてないっぽい。
vendor/plugins/login_engine/lib/login_engine/authenticated_system.rb
をざーっと見たんですけど、roleで制限かけられるメソッドは見当たらなかったっす。
テーブル
login_engine
mysql> show fields from users; +-----------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+-------------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | login | varchar(80) | | | | | | salted_password | varchar(40) | | | | | | email | varchar(60) | | | | | | firstname | varchar(40) | YES | | NULL | | | lastname | varchar(40) | YES | | NULL | | | salt | varchar(40) | | | | | | verified | int(11) | YES | | 0 | | | role | varchar(40) | YES | | NULL | | | security_token | varchar(40) | YES | | NULL | | | token_expiry | datetime | YES | | NULL | | | created_at | datetime | YES | | NULL | | | updated_at | datetime | YES | | NULL | | | logged_in_at | datetime | YES | | NULL | | | deleted | int(11) | YES | | 0 | | | delete_after | datetime | YES | | NULL | | +-----------------+-------------+------+-----+---------+----------------+ 16 rows in set (0.06 sec)
auth_generator
mysql> show fields from users; +---------------+--------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------------------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | login | varchar(80) | YES | | NULL | | | cryptpassword | varchar(40) | YES | | NULL | | | validkey | varchar(40) | YES | | NULL | | | email | varchar(100) | | | | | | newemail | varchar(100) | YES | | NULL | | | ipaddr | varchar(15) | | | | | | created_at | datetime | | | 0000-00-00 00:00:00 | | | updated_at | datetime | | | 0000-00-00 00:00:00 | | | confirmed | tinyint(1) | | | 0 | | | domains | text | | | | | | image | text | YES | | NULL | | | firstname | varchar(40) | | | | | | lastname | varchar(40) | | | | | +---------------+--------------+------+-----+---------------------+----------------+ 14 rows in set (0.05 sec)
domainsの中身は"user,2 admin,1"みたいな感じで、userレベル2、管理者レベル1みたいに扱うらしい。
インストール方法
login_engine
ruby script/plugin install engines ruby script/plugin install login_engine
で、コードを変更して、テーブルをrakeで作ればOK。簡単。
auth_generator
まずファイルをダウンロード
gem install <file> ruby /script/generate auth account
で、コードを変更して、db/user.mysqlを実行してテーブルを作ればOK。ちょっとめんどくさい。
まとめ
権限でログインを制限できるっていう意味で、auth_generatorの方が便利なんだけど、あんまり使われてないような気がする。
確かにいちいち全てのメソッドにアクセス制限を書くのは面倒くさいもんね。それともlogin_engineの実装がかっこいいから?
auth_generatorがengineになってたらいいのになー。