你可以尋找寶石Devise和CanCan。這雙組合真的很強大。這使得兩個模型用戶和角色。在角色中,您可以創建新角色,而無需爲其創建新模型。雖然它創建了模型能力,但您可以在此定義角色的訪問規則。
手冊: http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/
在這裏你可以找到設計的和慘慘的來源和wikies:
https://github.com/plataformatec/devise
https://github.com/ryanb/cancan
我的模式是這樣的:
作用。RB
class Role < ActiveRecord::Base
has_and_belongs_to_many :users
end
User.rb
class User < ActiveRecord::Base
has_many :accounts
has_and_belongs_to_many :roles
# 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, :username, :password, :password_confirmation, :remember_me, :role_ids
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
end
Ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user
if user.role? :administrator
can :manage, :all
elsif user.role? :operator
can :read, Account
can :read, Server
elsif user.role? :customer
can :manage, Account
can :read, Server
end
end
end
在控制器中必須添加僅此兩行:
class YourController < ApplicationController
before_filter :authenticate_user!
load_and_authorize_resource
...
end
這應該是我的建議。我喜歡這種方法,它鼓勵將業務策略與其他應用程序邏輯分開。 –
是的,這種分離給予了良好和靈活的能力。我在一個項目中使用它,在這個項目中,開發人員製作了非常不舒服的認證系統,爲了添加新角色和新功能,我必須在每個控制器和模型中編寫大量代碼。爲了安裝和配置Devise和CanCan,我花了很多時間去除舊系統,並花了將近兩個小時的時間。現在我很高興。當我有空的時候,我打算編寫用於管理角色和能力的用戶界面。有了這些系統,這個任務變得簡單。 –
我們已經在幾個應用中使用了這個功能,並且我們還發現這個設計-cancan混合是'最好的'方法。許多組織很快就採用這種標準作爲今年的認證/授權標準。 –