這就是我在其中一個應用程序中管理用戶的方式。我有
rails g devise User
只產生一個User
類,我添加了一個role
柱與此遷移:
class AddRoleToUser < ActiveRecord::Migration
def change
add_column :users, :role, :string, :default => "client"
end
end
和我User
型號:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable, :lockable and :timeoutable
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
def admin?
self.role == "admin"
end
end
然後創建新用戶你所要做的就是在控制器中提供一個自定義方法(甚至可以是子類Devise::RegistrationsController
),如下所示:
# some_controller.rb
def custom_create_user
if current_user.admin?
User.create(:email => params[:email], password => params[:password])
redirect_to(some_path, :notice => 'sucessfully updated user.')
else
redirect_to(some_other_path, :notice => 'You are not authorized to do this.')
end
end
我也會推薦可能會使用一個單獨的「角色」模型,以便用戶在必要時可以擁有多個角色。可能會讓一切變得更容易。然後一個連接模型,可能被稱爲「UserRole」,它將具有user_id和role_id。 – ardavis 2011-06-14 01:55:12
的確如此,儘管當我需要定義多個角色或複雜的權限時,我通常使用[cancan](https://github.com/ryanb/cancan)。 – David 2011-06-14 03:16:28
我也使用CanCan,但我仍然使用單獨的角色模型。看看這個真棒維基頁面瑞安貝茨作出:https://github.com/ryanb/cancan/wiki/Separate-Role-Model – ardavis 2011-06-14 03:49:28