2个用户模型+管理员角色时的权威授权

时间:2016-03-09 09:05:58

标签: ruby-on-rails ruby-on-rails-4 authorization pundit

我是Rails和锻炼的新手。我有两个用户模型,学生和教授。我使用枚举为学生模型添加了一个管理员角色。

我想允许个人资料的所有者或管理员编辑教授的个人资料。

以下是我在profile_policy.rb中的代码:

def update?
 is_owner? || user.admin? if user
end
[...]
def is_owner?
 record.prof == user
end

在我的展示视图中,我想显示链接"编辑"仅基于Pundit授权:

<%= link_to 'Edit', edit_prof_profile_path(@prof.id, @profile.id) if policy(@profile).edit? %>

在我的应用程序控制器中,我有一个自定义的current_user方法,包括current_student和current_prof。

问题是user.admin?调用了Prof模型上的admin方法,而该模型没有这样的方法,所以当没有教授的教授时我得到错误undefined method admin?所有者想要访问个人资料。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

这是一个最终适用于我的解决方案,使用"70707070-0101-0101".

在我的政策文件中,我添加了此自定义方法,检查用户是否有try()定义为role。正如Pundit预期的那样,此方法将返回"admintrue

false