【问题标题】:How can I allow only a specific user role to update an attribute to a specific value如何仅允许特定用户角色将属性更新为特定值
【发布时间】:2016-07-19 11:57:54
【问题描述】:

下午,有点问题,不知道怎么解决。

我正在尝试设置一些规则,只允许特定类型的用户角色将模型上的状态属性更新为特定状态。

所以我考虑用 pundit 来做这件事,因为这似乎是一个授权问题,但是一个问题是你不能将参数传递给我也需要访问的 pundit 策略(所以我可以看到它们是什么属性试图更改为),似乎将参数传递给权威政策是不好的做法。

下一个选项是让它成为模型中的回调,但是这里的问题是我无法访问回调中的 current_user 并且再次将 current_user 助手添加到模型中似乎是不好的做法。

所以我可能只剩下在控制器中做这件事了吗?似乎又不是合适的地方呢?

一个更容易理解的例子:

我希望允许具有管理员角色的用户将帖子的状态更改为“已解决”,不允许其他人将状态更改为“已解决”

【问题讨论】:

  • 您可以将 current_user 传递给局部变量并在模型中执行此操作。这是一种有意义的方法,而不是控制器级别。

标签: ruby-on-rails ruby


【解决方案1】:

试试这个, 在用户模型中创建一个实例方法,如下所示,

def is_admin?
  self.has_role(:admin)   # if you are using rolify 
      ---OR---
  self.status == "admin"  # if you have status attribute in your user table
end

然后在 post 控制器的 edit/update 方法中调用 current_user 上的这个方法。检查 current_user 是否为管理员

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-29
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2021-02-03
    • 2019-03-12
    相关资源
    最近更新 更多