Laravel用户授权系统的使用方法示例
前言本文主要给大家介绍的是关于Laravel用户授权系统使用的相关内容 首先两个概念分清楚:用户身份认证 Authentication - 处理用户登录,退出,注册,找回密码,重置密码,用户邮箱认证 etc.. 权限管理 Authorization - 负责 用户 与 权限,用户组 三者之间的对应,以及管理. 下面话不多说了,来一起看看详细的介绍吧 基本用法示例 authorize('update',$post);
第一个参数 $ability,表示具备什么权限。第二个参数 $post,是一个模型实例。 不需指定模型的动作,比如 create,不需要指定的模型。第二个参数传一个类名。如: authorize('create',Post::class);
使用的场景有:控制器辅助方法,中间件,Blade模板,User 模型的 can 和 can't 方法。 authorize方法: parseAbilityAndArguments($ability,$arguments);
return app(Gate::class)->authorize($ability,$arguments); 有两种方式实现用户授权 Gates编写 Gates一般在 appProvidersAuthServiceProvider 的 boot 方法中定义。 id == $post->user_id;
});
第一个参数是权限的名称,第二个参数是满足权限的条件,可以是闭包,控制器方法。 授权动作allows 和 denies 两种方法,表示允许和否定。 第一个参数是权限的名称,第二个参数是模型,可以为空。这里不需要传入用户,框架会自动处理。 if (Gate::denies('update-post',$post)) {
// 指定用户不能更新博客... } 如果需要指定特定用户,可以使用 Gate Facade 中的 forUser 方法: allows('update-post',$post)) {
// 指定用户可以更新博客...
}
if (Gate::forUser($user)->denies('update-post',$post)) { 策略生成策略artisan 命令: 也可以指定 model,生成包含 CURD 的策略方法。 注册策略在 AuthServiceProvider 的 policies 属性,可以将模型和策略对应起来。如: PostPolicy::class,];
策略方法 id === $post->user_id;
}
策略方法,就是权限名称, 当 authorize 方法调用的时候,实际上会自动注入 User 和 Post 类型的两个参数,也因此使用授权系统必须是用户登录的情况下。 使用策略也不一定要和模型绑定,比如这样也可以: TravelPolicy::class,'aaa'=>TravelPolicy::class,];
这个 aaa 字符串对应策略类为 authorize('update','aaa');
此时也是可行的,第二个参数这个时候就必须是字符串 aaa 了,然后 authorize 方法只会自动注入 User 参数。 官方文档Laravel 5.5 文档 https://laravel-china.org/docs/laravel/5.5/authorization/1310 总结以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对编程之家的支持。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |