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

Pundit authorization when 2 user models + admin role

我是 Rails 的新手,正在锻炼。我有两个用户模型,Student 和 Prof。我使用枚举向 Student 模型添加了一个管理员角色。

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

这是我在 profile_policy.rb 中的代码:

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

并且在我的显示视图中,我只想根据 Pundit 授权显示 link "edit":

<%= 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 方法,Prof 模型没有这样的方法,所以当 Prof 不是所有者时我得到错误 undefined method admin?想访问个人资料。

我该如何解决?

这是一个最终对我有用的解决方案,使用 try()

在我的策略文件中,我添加了这个自定义方法来检查用户是否将 role 定义为 "admin。此方法将 return truefalse,正如 Pundit 所预期的那样。

def is_admin?
  user.try(:role) == "admin"
end