Ale*_*pov 2 authorization ruby-on-rails
我有一个Accounts资源(模型+控制器).目前,其AccountsController前面的所有操作都是authorize_admin before_action,它检查用户是否是管理员,如果不是 - 它将用户重定向到home_path.
我现在想要做的是允许用户编辑自己帐户的某些字段.我不知道该怎么做.我有几个想法:
在同一个帐户控制器中创建自定义edit_personal_account和update_personal_account操作,使用自定义personal_account_params(Rails 4,强参数).在personal_account_params我将permit只允许用户编辑的字段.
创建一个新的PersonalAccounts正常宁静的动作控制器,但只edit,update和show.该控制器将再次与Account模型交互.
使用像cancancan或的宝石pundit.我已经浏览了他们的文档和wiki,但到目前为止,我只找到了如何根据角色限制对整个操作的访问的示例,而不是如何限制对特定字段的访问.
所以我的问题是 - 这三种方式中哪一种最适合我的情景,还有其他更好的方法吗?
这样的事怎么样?
# accounts_controller.rb
before_action :authorize_admin, except: [:edit, :update]
def update
@account.update(account_params)
end
private
def account_params
if current_user.admin?
params.require(:account).permit(<all params>)
else
params.require(:account).permit(<subset of params>)
end
end
Run Code Online (Sandbox Code Playgroud)
这样您就可以在account_params方法中明确声明普通用户可以编辑哪些参数,这些参数可能是您想要的,也可能不是.
您还需要edit根据当前用户的角色隐藏视图中的一些字段(即,如果她是管理员,隐藏任何内容等),但这应该不是很难.您甚至可以创建一个自定义表单构建器.