我正在使用 laravel 策略来检查对控制器方法的访问。
这是我的 PostController。用于显示用户列表的 index() 方法:
class PostController extends Controller
{
public function index(Post $post)
{
$this->authorize($post);
return $post->all();
}
}
这是我的 PostPolicy(检查对 PostController 的 index() 方法的访问权限)。
class PostPolicy
{
// This function executes only for authenticated users.
// I want to use it for guest users too
public function index(User $user)
{
return $user->can('get-posts');
}
}
我使用https://github.com/Zizaco/entrust模块进行角色授权。角色和权限存储在数据库中,我可以使用$user->can('get-posts')检查权限的调用来查看帖子列表。这适用于经过身份验证的用户,但不知何故不适用于来宾。对于来宾,根本不会调用 PostPolicy 中的 Index 方法。客人总是被拒绝访问 PostController 的索引方法。
为什么政策不适用于 Laravel 的来宾?毕竟,客人也可以拥有一些权利。如何为来宾分配权限?
问题是索引需要 User 类的对象作为输入:
公共功能索引(用户$用户)
如果用户没有被授权,那么他就没有这样的对象。我最喜欢这个解决方案:
Create a class
Guest extends Userand writehttps://github.com/laravel/framework/issues/10568#issuecomment-243692377
因此,在论证中写
公共功能索引(来宾$用户)