我的Rails應用程序有一個用戶模型和一個組模型,其中用戶屬於一個組。由於這一點,用戶可以是管理員,經理,訂戶等。用戶組的Rails插件
直到最近,例如,當需要在應用程序上創建新的管理員時,該過程只是創建一個新的普通帳戶,然後管理員將新的普通帳戶的group_id屬性設置爲管理員的組ID ...在我的用戶控制器中使用了一些條件。但我認爲這不是很乾淨。因爲對於安全,我需要添加這樣的代碼(例如)用戶#更新時間:
class UsersController < ApplicationController
# ...
def update
@user = User.find(params[:id])
# I need to add some lines here, just as on the bottom of the post.
# I think it's ugly... in my controller. But I can not put this
# control in the model, because of current_user is not accessible
# into User model, I think.
if @user.update_attributes(params[:user])
flash[:notice] = "yea"
redirect_to root_path
else
render :action => 'edit'
end
end
# ...
end
有沒有乾淨的方式做到這一點,用Rails插件?或不...
通過更乾淨,我認爲這可能是更好的,如果從用戶#更新這些行:
if current_user.try(:group).try(:level).to_i > @user.try(:group).try(:level).to_i
if Group.exists?(params[:user][:group_id].to_i)
if Group.find(params[:user][:group_id].to_i).level < current_user.group.level
@user.group.id = params[:user][:group_id]
end
end
end
...從控制器中刪除和應用程序能夠僅噹噹前用戶的組級別比編輯的用戶更好時才設置組。但是,也許我錯了,也許我的代碼是尚不完善:)
注:在我的用戶模型中,有這樣的代碼:
class User < ActiveRecord::Base
belongs_to :group
attr_readonly :group_id
before_create :first_user
private
def first_user
self.group_id = Group.all.max {|a,b| a.level <=> b.level }.id unless User.exists?
end
end
你認爲這是一個好辦法嗎?或者你處理不同?
謝謝。
定義「乾淨的方式」?你的代碼不乾淨,你想重構它。然後顯示代碼。從你的描述中我不太明白你想達到什麼目的?用戶將永遠必須以某種方式分配給組。 – nathanvda 2010-05-21 10:42:41
感謝您的幫助。我更新了我的帖子,以便更容易理解。 – moshimoshi 2010-05-23 10:10:42