我的问题是只显示用户被授权的模板的那些部分。 让我们假设有一个项目只包含用户和用户角色,以及由phx.gen.html生成的模板和控制器。设置路线" / users"我们得到了一个包含所有用户数据和按钮的漂亮表格,用于"显示","编辑"和"删除"。
用户角色可能只是普通用户"和一个" admin"。现在我希望管理员能够删除和编辑所有用户,但"用户"应该只能编辑自己以及我的问题是什么,他应该只看到那些按钮供他参赛。
我已经为相应的操作设置了一些插件,所以正常的"用户"不能编辑,删除甚至显示其他用户,但他甚至不应该知道这样做的选项。所以,我想隐藏那些按钮。以下是我遇到或解决的解决方案,但它们似乎都不适用。
任何人都有另外一个想法,或者可能是某个讨论此事的人的提法?我只能找到关于1)的文章以及如何实现它。
答案 0 :(得分:1)
我喜欢将权限逻辑保存在一个位置,并在控制器和模板中使用它。灵感来自Ruby on Rails'旧的cancan
gem,我定义了一个函数:
defmodule MyApp.Can do
def can?(_user, :create, Post), do: true
def can?(user, :delete, %Post{} = post), do: user.is_admin || post.user_id == user.id
...
end
现在在控制器中,使用此功能进行授权:
def delete(...) do
...
if MyApp.Can.can?(current_user, :delete, post) do
...
else
...
end
end
在模板中:
<%= MyApp.Can.can?(@current_user, :delete, @post) %> <Delete Button> <% end %>