【发布时间】:2018-02-02 18:25:20
【问题描述】:
我不确定以前没有处理过这个问题,但是我该如何使用 VueJs 并在 Vue 模板中授权操作?
如果我使用 Laravel 的刀片,这很容易(使用 @can 指令),但是在 Google 上搜索了几个小时之后,没有文档或任何方法可以在 Vue 中执行此操作。
现在,我知道我可以简单地将用户权限加载到视图内的数组/JSON 对象中,但似乎无法使用 Laravel 的门方法在 Vue 模板中显示/隐藏操作以确定是否允许用户对特定记录执行操作。
例如,有一个 cmets 列表,但用户必须拥有评论才能看到“编辑”按钮。
问题是,如果我在 Vue 中实现逻辑,我将为此在整个后端和前端复制授权逻辑。
使用 Laravel 的策略,我能够执行特定操作的复杂授权。但我对如何在 Vue 中实施该政策感到困惑。
还有更复杂的场景,例如如果具有admin 角色的用户正在浏览 cmets,即使他们不拥有评论,他们也应该能够编辑它。
有人对这种场景有什么建议吗?
编辑:
现在我可以为我的模型添加一个属性访问器,例如:
型号:
class Comment extends Model
{
protected $appends = ['can_update'];
public function getCanUpdateAttribute()
{
return Gate::allows('update', $this);
}
}
Vue:
<button v-if="comment.can_update">Edit</button>
但这似乎又在重复我的策略中已经存在的逻辑。
【问题讨论】:
-
这是一个值得思考的好点。
-
当您从服务器获取记录时,此时您知道某人是否是管理员,他们是否可以编辑/创建/删除等 - 为什么不以简单的形式提供布尔字段。假设您要列出这些虚构的属性。在服务器端,只需添加
is_admin或can_edit字段并将其传递回 vue 应用程序。根据值(真/假),渲染行/按钮/颜色/等。只需使用Vue渲染服务器提供的数据。 -
查看这篇文章,它在前端使用 Laravel ACL pineco.de/implementing-laravels-authorization-front-end
-
您可以在 Vue 组件中评估门,因为 Vue 是客户端,并且策略是定义的(并在服务器端进行评估)。如果您在策略方法中执行数据库查询,则无法在客户端执行此操作。您需要在服务器端评估策略方法,并将结果传递给您的视图组件。
标签: laravel laravel-5 vue.js vuejs2 laravel-5.4