官方地址: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个表
- roles:角色表
- permissions:权限表
- model_has_roles:用户与角色的关联表,定义用户所用户的角色
- role_has_permissions:角色与权限的关联表,定义角色所拥有的权限
- 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());
其他用法请参考官网
本文介绍如何使用laravel-permission扩展包实现角色与权限管理。包括安装配置、表结构说明及基本用法,如创建角色、分配权限等。
4067

被折叠的 条评论
为什么被折叠?



