这是我关于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专家用户那里得到更好的建议?
谢谢大家...
答案 0 :(得分:0)
从性能的角度来看,按照你在1中显示的操作符过滤行是最好的。
出于安全原因,您还应该检查控制器的before_filter,因此操作员1无法查看其他操作员数据。例如,如果系统1属于运算符1,则需要确保运算符2无法键入浏览器系统/ 1并查看数据(假设system / 1为:controller =>:system,:action =>:show ,:id => 1)
如果性能不是很大问题你可以看看Authorization plugin,它允许基于角色的对象实例授权用很酷的语法来检查权限:)