Ruby on rails Rails-设计帮助:具有不同用户权限级别的应用程序
这是我关于stackoverflow的第一个问题,它非常通用,希望我能在这里得到建议 我很快制作了一个Rails3纯管理应用程序,主要用于有关加热设备维护的数据输入任务。它由大约10个模型组成,我广泛使用脚手架和资源嵌套来构建一个完整的特权用户(admin)应用程序。主要有一个系统模型,有很多子模型,每个系统属于一个操作员 现在,我需要每个操作员登录并管理自己的系统,这几乎完全是管理员用户可以做到的,但将权限限制在属于该操作员的系统上 现在的问题是。。。我应该: (1)过滤模型脚手架生成控制器中的数据? 例如(不关心语法,只是给出想法): (2)为限制权限的操作员编写不同的控制器? 将脚手架生成的结构替换为一个用于管理员控制器的文件夹(例如System.all语句),另一个用于操作员控制器的文件夹(例如@operator.systems语句) (3)在单独的应用程序中拆分? 保存脚手架生成的结构?你在说不!不不对吧? (4)希望从stackoverflow专家用户那里得到更好的建议?Ruby on rails Rails-设计帮助:具有不同用户权限级别的应用程序,ruby-on-rails,privileges,Ruby On Rails,Privileges,这是我关于stackoverflow的第一个问题,它非常通用,希望我能在这里得到建议 我很快制作了一个Rails3纯管理应用程序,主要用于有关加热设备维护的数据输入任务。它由大约10个模型组成,我广泛使用脚手架和资源嵌套来构建一个完整的特权用户(admin)应用程序。主要有一个系统模型,有很多子模型,每个系统属于一个操作员 现在,我需要每个操作员登录并管理自己的系统,这几乎完全是管理员用户可以做到的,但将权限限制在属于该操作员的系统上 现在的问题是。。。我应该: (1)过滤模型脚手架生成控制器中
谢谢大家…从性能角度来看,按运算符筛选行(如1所示)是最好的 出于安全原因,您还应该在筛选控制器之前进行签入,以便操作员1无法查看其他操作员数据。例如,如果系统1属于操作员1,则需要确保操作员2无法键入浏览器系统/1并查看数据(假设系统/1为:controller=>:system,:action=>:show,:id=>1)
如果性能不是一个大问题,您可以看看,它允许基于角色的对象实例授权,并使用很酷的语法检查权限:)谢谢您,Adrian,当然会有一个before_过滤器,通过输入用户和密码来验证操作员。然后,所有数据都将通过仅通过operator对象获取数据进行过滤,请查看上面的:@systems=@operator.find(session[:operator_id]).systems。是的,你是对的,甚至其他动作也必须有类似的过滤器。也许一个甚至带有重定向的before_过滤器应该很好。我关心的是代码的可维护性,而不是性能。第一个想法仍然是最好的吗?当然我会看看你提到的插件。
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