Rails - 设计帮助:具有不同用户权限级别的应用程序

时间:2011-01-17 12:34:30

标签: ruby-on-rails privileges

这是我关于stackoverflow的第一个问题,它非常通用,希望我能在这里得到建议。

我很快制作了一个Rails3管理专用应用程序,主要用于有关加热设备维护的数据输入任务。它由大约10个模型组成,我广泛使用脚手架和资源嵌套来构建一个完整的特权用户(admin)应用程序。主要有一个系统模型,有许多子模型,每个系统都属于一个操作员。

现在我需要每个运营商登录和管理自己的系统, - 几乎 - 管理员用户可以做的事情,但是限制属于该运营商的系统的权限。

现在问题是......我应该:

(1)过滤模型的脚手架生成的控制器中的数据?

E.g。 (不要关心语法,只是为了提出想法):

def index
  if session[:operator_id]
    @operator = operators.find(session[:operator_id])
    @systems = @operator.systems
  else if session[:admin] == true
    @systems = System.all
  end
end

(2)为限制特权的运营商编写不同的控制器?

将脚手架生成的结构替换为管理员控制器的一个文件夹,例如: System.all语句,以及第二个用于操作员控制器的语句,例如@ operator.systems语句。

(3)在不同的应用程序中拆分?

要保存脚手架生成的结构?你说不!不!不!对吧?

(4)希望从stackoverflow专家用户那里得到更好的建议?

谢谢大家...

1 个答案:

答案 0 :(得分:0)

从性能的角度来看,按照你在1中显示的操作符过滤行是最好的。

出于安全原因,您还应该检查控制器的before_filter,因此操作员1无法查看其他操作员数据。例如,如果系统1属于运算符1,则需要确保运算符2无法键入浏览器系统/ 1并查看数据(假设system / 1为:controller =>:system,:action =>:show ,:id => 1)

如果性能不是很大问题你可以看看Authorization plugin,它允许基于角色的对象实例授权用很酷的语法来检查权限:)