gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中仅对模型的特定属性实现基于角色的授权?

转载 作者:行者123 更新时间:2023-12-02 01:01:00 24 4
gpt4 key购买 nike

我有一个 Accounts 资源(模型 + Controller )。目前,AccountsController 的所有操作都在 authorize_admin before_action 之前,它检查用户是否是管理员,如果不是 - 它将用户重定向到 home_path

我现在要做的是允许用户编辑自己帐户的某些字段。我不知道该怎么做。我有几个想法:

  1. 在同一帐户 Controller 中创建自定义 edit_personal_accountupdate_personal_account 操作,使用自定义 personal_account_params(Rails 4,强参数) .在 personal_account_params 中,我将允许仅允许用户编辑的字段。

  2. 使用正常的 restful 操作创建一个新的 PersonalAccounts Controller ,但只有 editupdateshow。此 Controller 将再次与 Account 模型交互。

  3. 使用像 cancancanpundit 这样的 gem。我浏览了他们的文档和维基,但到目前为止,我只找到了如何根据角色限制对整个操作的访问的示例,而不是如何限制对特定字段的访问的示例。

所以我的问题是 - 三种方式中哪一种最适合我的场景,还有其他更好的方式吗?

最佳答案

这样的事情怎么样?

# 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

这样您就可以在您的 account_params 方法中明确声明普通用户可以编辑哪些参数,这可能是您想要的,也可能不是您想要的。

您还需要根据当前用户的角色隐藏您的 edit View 中的一些字段(即,如果她是管理员,则什么都不隐藏等),但这应该不是很难的。您甚至可以创建自定义表单生成器。

关于ruby-on-rails - 如何在 Rails 中仅对模型的特定属性实现基于角色的授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28603124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com