laravel - 无模型的授权策略

标签 laravel authentication laravel-5.1

我需要在论坛上授权用户。
所以在 Blade 中,我有 @can('editPost', $post)在显示表单以回复主题之前。我的 PostPolicy类(class)有 editPost如果是用户自己的帖子,则验证为 true 的方法。

但是,当我想做一个简单的检查时会出现问题,例如 deletePost() .这将检查是否 Auth::user()->isAdmin

public function deletePost(User $user) {
    return Auth::user()->isAdmin;
    // return $user->isAdmin
}

但是,这甚至不会被调用,因为我没有传递 Post 的实例。

我的实际应用程序要复杂得多,但我正在使用 isAdmin作为一个简单的例子。

我想定义 $gate->define('deletePost', 'App\Policies\PostPolicy@deletePost');AuthServiceProvider可以工作,但最终会分离我的定义和方法,最终对于大型应用程序困惑 AuthServiceProvider

最佳答案

当您注册一个策略时,它是用于将检查路由到该类的类名,因此为了路由到该策略,您只需传递您注册它的类型的类名。

尝试使用 @can('delete', Post::class) 看看是否能让你到达那里

引用
Illuminate\Auth\Access\Gate::firstArgumentCorrespondsToPolicy

编辑
经过更多的挖掘,我发现了这个
https://github.com/laravel/framework/commit/70f75255808ffc96275e6f2f356616dd2e163434#diff-961368895033e553787b301c3be0e17a

所以看起来如果您使用的是 5.1.23 版本,那么您将能够传递一个字符串,否则您只需要传递新的 Post

关于laravel - 无模型的授权策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33576852/

相关文章:

php - 在 URL 中传输 session ID( session trans_sid 等效 Laravel)

php - 三个表和 belongsTo() 函数的 Laravel Eloquent 关系映射问题

authentication - 在 servlet 和 EJB 之间使用 @RunAs

authentication - Laravel 5:如何通过构造函数添加Auth::user()-> id?

php - 如何将我的 Controller 移动到 Laravel 5.2 中的单独包文件夹中?

php - 未找到必需的 @SWG\Info()

php - 使用 Laravel 更新 MySQL 数据库字符集

php - 拉拉维尔 5.4 : controller method is called twice on a redirect to it

laravel - 无法声明类 Controller,因为该名称已在使用中

node.js - 在 Express 应用程序中验证 Socket.IO 客户端