如果这是这个问题的错误堆栈,请道歉.如果是这样,请指引我到正确的网站.
我有一个Rails应用程序,其中的用户可以是三种角色之一的成员:user
,admin
,或system
.我的rails应用程序基本上用作骨干应用程序的JSON后端.所有客户端繁重的工作都是通过coffeescript文件完成的,这些文件在资产管道中处理.
现在,我通过我在application.html.slim
关卡中创建的对象将一些用户属性传递到javascript中.看起来像这样的东西:
APP.currentUser = name: "#{@current_user.name}" role: "#{@current_user.role}"
在我的主干应用程序的几个地方洒满了这样的调用:
if APP.currentUser.role is 'admin'...
这似乎是非常不安全的,因为任何人的知识可以打开一个开发者控制台中,修改的实例App.currentUser
是admin
,然后访问前端的管理功能.现在,rails侧面足够聪明,可以检查并确保@current_user
在尝试这样做之前可以执行这些功能,但似乎应该有一种方法可以在前端阻止它,而不会将角色发布到javascript中.
我是否过于谨慎或遗失了什么?
好吧,我认为你不能比这更好.在我需要对我的视图引入操作权限的情况下,我曾经做过类似的事情.像这样的东西:
def as_json(options={}) super(:include => { :attributes_to_include } ).merge({ :permissions=> { :can_create => (user.can_create?), :can_delete => (user.can_delete?), :can_update => (user.can_update?) } }) end
if(@user.permissions.can_create) # Display create view if(@user.permissions.can_update) # Display update view .....
一般来说,这是你能做的最好的事情.您无法在前端隐藏用户的视图,除非整个页面是从Rails后端加载的,并且具有视图权限.当然,与如何处理基于Ajax的视图相矛盾.
此外,您需要确保在Rails后端授权操作.