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 true
或 false
,正如 Pundit 所预期的那样。
def is_admin?
user.try(:role) == "admin"
end
我是 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 true
或 false
,正如 Pundit 所预期的那样。
def is_admin?
user.try(:role) == "admin"
end