我的问题是我在Laravel中有多个身份验证,我想要做的是获得此模型App \ Models \ Admin而不是App \ User
的授权在我的政策中
class AdminsPolicy
{
use HandlesAuthorization;
public function view(\App\Models\Admin $admin)
{
return in_array($admin->role, [2,3,4]);
}
}
现在每当我在我的控制器中做这样的事情时
dd(Auth::guard('admin')->user()->can('view'));
即使我的管理员角色正确,它也总是返回
答案 0 :(得分:1)
通常,Laravel中的策略以某种方式与特定资源相关联。 使用策略时,您必须在AuthServiceProvider中注册它,如此
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
Post::class => PostPolicy::class,
];
如您所见,本示例中的策略与Post模型相关联。
如果您想查看,用户是否可以查看'您必须将该模型作为第二个参数传递的特定帖子:
if($user->can('view', $post) { ... }
// or if you don't need a specific instance :
if($user->can('create', Post::class) { ... }
也许您实际上正在寻找Gate
您可以在AuthServiceProviders启动函数中定义如下:
Gate::define('view', function(\App\Models\Admin $admin) {
return in_array($admin->role, [2,3,4]);
});