首页 > 开发 > PHP > 正文

Laravel用户授权系统的使用方法示例

2024-05-04 22:42:07
字体:
来源:转载
供稿:网友

前言

本文主要给大家介绍的是关于Laravel用户授权系统使用的相关内容

首先两个概念分清楚:

用户身份认证 Authentication - 处理用户登录, 退出, 注册, 找回密码, 重置密码, 用户邮箱认证 etc..

权限管理 Authorization - 负责 用户 与 权限, 用户组 三者之间的对应, 以及管理.

下面话不多说了,来一起看看详细的介绍吧

基本用法

示例

$this->authorize('update', $post);

第一个参数 $ability,表示具备什么权限。第二个参数 $post,是一个模型实例。

不需指定模型的动作,比如 create,不需要指定的模型。第二个参数传一个类名。如:

$this->authorize('create', Post::class);

使用的场景有:控制器辅助方法,中间件,Blade模板,User 模型的 can 和 can't 方法。

authorize方法:

public function authorize($ability, $arguments = []){ list($ability, $arguments) = $this->parseAbilityAndArguments($ability, $arguments);  return app(Gate::class)->authorize($ability, $arguments);}

有两种方式实现用户授权

Gates

编写 Gates

一般在 app/Providers/AuthServiceProvider 的 boot 方法中定义。

Gate::define('update-post', function ($user, $post) { return $user->id == $post->user_id;});

第一个参数是权限的名称,第二个参数是满足权限的条件,可以是闭包,控制器方法。

授权动作

allows 和 denies 两种方法,表示允许和否定。

第一个参数是权限的名称,第二个参数是模型,可以为空。这里不需要传入用户,框架会自动处理。

if (Gate::allows('update-post', $post)) { // 指定用户可以更新博客...} if (Gate::denies('update-post', $post)) { // 指定用户不能更新博客...}

如果需要指定特定用户,可以使用 Gate Facade 中的 forUser 方法:

if (Gate::forUser($user)->allows('update-post', $post)) { // 指定用户可以更新博客...} if (Gate::forUser($user)->denies('update-post', $post)) { // 指定用户不能更新博客...}

策略

生成策略

artisan 命令:

php artisan make:policy PostPolicy

也可以指定 model,生成包含 CURD 的策略方法。

注册策略

在 AuthServiceProvider 的 policies 属性,可以将模型和策略对应起来。如:

protected $policies = [ Post::class => PostPolicy::class,];

策略方法

public function update(User $user, Post $post){ return $user->id === $post->user_id;}

策略方法,就是权限名称,$this->authorize(‘update', $post)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表