Rails before_filter 检查多个角色

发布于 2024-11-08 13:30:46 字数 731 浏览 0 评论 0原文

在我的 before 过滤器中,我调用一个包含以下代码的方法:

authorized_for_roles :administrator

在我的 application_controller 中,

def authorized_for_roles(*roles)
roles.each{|role_name| return true if current_user.role.name == role_name}

即使使用管理员角色登录,这似乎也不会返回 true。我的语法不正确吗?

如果我将代码切换为仅读取,

return true if current_user.is_an_administrator?

一切都会很好。有人可以告诉我如何修改代码来检查 is_an 吗?对于传递给该方法的每个角色?我希望能够做一些像

authorized_for_roles :administrator, :moderator

我尝试过的事情

roles.each{|role_name|return true if current_user.try(:is_an, role_name)}

,但这没有用。

编辑:更改行间距,以便代码片段的格式如下......

In my before filter, I call a method containing the following code:

authorized_for_roles :administrator

In my application_controller

def authorized_for_roles(*roles)
roles.each{|role_name| return true if current_user.role.name == role_name}

This does not seem to be returning true even when logged in with the administrator role. Is my syntax incorrect?

If I switch the code to just read

return true if current_user.is_an_administrator?

everything works great. Can someone tell me how to modify the code to check is_an? for each role passed to the method? I'd like to be able to do something like

authorized_for_roles :administrator, :moderator

I tried

roles.each{|role_name|return true if current_user.try(:is_an, role_name)}

but this did not work.

EDIT: changed line spacing so that code snippets are formatted as such...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清秋悲枫 2024-11-15 13:30:46

您想使用 Enumerable#any 吗?方法。在你的第一个例子中:

def authorized_for_roles (*roles)
  roles.any? { |role_name| current_user.role.name == role_name }
end

You want to use the Enumerable#any? method. In your first example:

def authorized_for_roles (*roles)
  roles.any? { |role_name| current_user.role.name == role_name }
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文