Laravel—权限管理扩展包Laravel-permission

本文介绍如何使用laravel-permission扩展包实现角色与权限管理。包括安装配置、表结构说明及基本用法,如创建角色、分配权限等。

官方地址:https://github.com/spatie/laravel-permission

  • 安装扩展包
composer require "spatie/laravel-permission:~2.7"
  • 生成数据库迁移文件
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
  • 运行迁移文件
php artisan migrate

运行后会生成5个表

  1. roles:角色表
  2. permissions:权限表
  3. model_has_roles:用户与角色的关联表,定义用户所用户的角色
  4. role_has_permissions:角色与权限的关联表,定义角色所拥有的权限
  5. model_has_permissions:用户与权限的关联表,定义用户所拥有的权限

与传统的权限管理相比,多了一个model_has_permissions表,也就是用户可以直接跳过角色,拥有权限

  • 生成配置文件
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config
  • 加载HasRoles

在用户User模型中使用laravel-permissions提供的trait——HasRoles,获取扩展包提供的所有权限和角色的操作方法

<?php

namespace App\Models;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Support\Facades\Auth;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;
}
  • 用法

创建角色,创建权限

$role=Role::create(['name'=>'writer'])
$permission=Permission::create(['name'=>'edit articles'])

给角色分配权限(两种方法都可以)

$role->givePermissionTo($permission);
$permission->assignRole($role);
//也可以直接通过字段名进行赋予权限
$role->givePermissionTo('edit articles');
$permission->assignTo('writer');

从角色中删除权限

$role->revokePermissionTo($permission); $permission->removeRole($role);

给用户分配角色、权限

$user->assignTo('writer');
$user->givePermissionTo('edit articles');

判断是否拥有某个权限

$user->hasPermissionTo('edit articles');
$user->can('edit articles');

判断是否拥有某个角色

$user->hasRole('writer');
//判断是否拥有至少一个角色
$user->hasAnyRole(Role::all());
//判断是否拥有所有的角色
$user->hasAllRoles(Role::all());

其他用法请参考官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值