現在、Rolify と CanCanを使用して、Rails 3 アプリで役割と能力を管理しています。私の質問は、作成時にデフォルトでユーザーに役割を持たせるにはどうすればよいですか? たとえば、「ユーザー」ロールを持っている場合、¿ アプリに登録するすべてのユーザーにデフォルトでユーザーロールを持たせるにはどうすればよいですか? My Ability.rbには次のコードがあります。
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.has_role? :admin
can :manage, :all
elsif user.has_role? :user
can :update, User, :id => user.id
end
end
end
私のユーザーモデルにはこれがあります:
class User < ActiveRecord::Base
rolify
authenticates_with_sorcery!
attr_accessible :username, :email, :password, :password_confirmation
validates_confirmation_of :password
validates_presence_of :password, :on => :create
validates_presence_of :username
validates_uniqueness_of :username
validates_presence_of :email
validates_uniqueness_of :email
end
ロールモデルこれ:
class Role < ActiveRecord::Base
has_and_belongs_to_many :users, :join_table => :users_roles
belongs_to :resource, :polymorphic => true
end
そして、UsersControllerからは次のようになります。
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
redirect_to users_path, :notice => "Tu usuario se ha guardado"
else
render "new"
end
end
最後に、Rolify Migrationは次のとおりです。
class RolifyCreateRoles < ActiveRecord::Migration
def change
create_table(:roles) do |t|
t.string :name
t.references :resource, :polymorphic => true
t.timestamps
end
create_table(:users_roles, :id => false) do |t|
t.references :user
t.references :role
end
add_index(:roles, :name)
add_index(:roles, [ :name, :resource_type, :resource_id ])
add_index(:users_roles, [ :user_id, :role_id ])
end
end
これで、以下を使用して、 Rails コンソールから手動でロールを割り当てることができます。
1 User.all
2 User.find(id)
3 User.add_role(:role)
しかし、すべてのユーザーが作成されたときにデフォルトの役割を自動的に割り当てるにはどうすればよいでしょうか?
ありがとう!