Приложение My Rails имеет модель пользователя и модель группы, где пользователь принадлежит группе.Благодаря этому пользователь может быть администратором, менеджером, подписчиком и т.д.обычная учетная запись, а затем администратор устанавливает атрибут новой обычной учетной записи group_id в качестве идентификатора группы администратора ... используя некоторое условие в моем пользовательском контроллереНо это не очень чисто, я думаю.Потому что для безопасности мне нужно добавить такой код в (например) User # update:
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
... были удалены изконтроллер и приложение смогли установить группу, только если уровень группы текущего пользователя лучше, чем отредактированный пользователь.Но, возможно, я ошибаюсь, возможно, мой код еще совершенен:)
Примечание: в моей модели User есть этот код:
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
Как вы думаете, это хороший способ?Или вы обрабатываете по-другому?
Спасибо.