千家信息网

Laravel中permission权限管理的扩展包怎么用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇"Laravel中permission权限管理的扩展包怎么用"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获
千家信息网最后更新 2026年11月01日Laravel中permission权限管理的扩展包怎么用

这篇"Laravel中permission权限管理的扩展包怎么用"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Laravel中permission权限管理的扩展包怎么用"文章吧。

什么是多用户角色

举个例子,例如我们平常使用的论坛

站长 ------ 拥有最高权限,最主要的是能够对用户进行管理的权限

管理员 ----- 对一些文章的管理,不会造成对网站有较大的影响

vip ----- 对一些资源有下载权限

普通用户 ---- 只能够进行简单的对自己文章的增删改、评论等

游客 ---- 只能进行基本的浏览

建表

  • roles ------- 角色信息:站长等

  • permissions ------- 权限信息:管理内容等

  • model_has_roles ------- 模型对应角色 = 用户对应的角色

  • role_has_permissions ------- 角色对应权限 = 角色有什么权限

  • model_has_permissions ------- 模型对应权限 = 用户有权限

我们来梳理一下关联关系

权限(permissions)与 角色(roles) ,一个 权限 可能被多个 角色 拥有,一个 角色 可能有多个 权限,关联关系:多对多(role_has_permissions)

用户 与 权限 一对多(model_has_permissions)

用户 与 角色 一对多(model_has_roles)

由次来说,关系明确了,当用户有什么角色 或者 有什么权限,即执行相应的操作

1. 安装扩展包

composer require "spatie/laravel-permission:~2.7"

生成数据库迁移文件:

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"

在 migration 目录下可看到相关表信息,执行数据库迁移

php artisan migrate

生成配置信息:

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"

在 User 模型下加载

.....use Spatie\Permission\Traits\HasRoles;  // useclass User extends Authenticatable{    use HasRoles;  // 加载角色相关信息    .....

创建角色 和用户

use Spatie\Permission\Models\Role;use Spatie\Permission\Models\Permission;.....$role = Role::create(['name' => 'writer']);  // 创建角色$permission = Permission::create(['name' => 'edit articles']);// 创建权限

使用


为用户添加权限

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

为用户添加角色

$user->assignRole('writer');$user->assignRole(['writer', 'admin']);

给用户删除权限

$user->revokePermissionTo('edit articles');

给角色添加权限

$role->givePermissionTo('edit articles');

为角色添加权限

$role->givePermissionTo('edit articles');

撤销一个权限 并且 添加一个新权限

$user->syncPermissions(['edit articles', 'delete articles']);

获得当前用户的角色集合

$user->getRoleNames();

将多个角色同步到权限

$role->syncPermissions($permissions); //  @param array $permissions$permission->syncRoles($roles);

从角色中删除权限

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

获取当前的用户的权限列表

$permissions = $user->permissions;

获取用户的所有权限,或者直接权限 (odel_has_permissions),或者从角色获取,或者从两者获取

$permissions = $user->getDirectPermissions();$permissions = $user->getPermissionsViaRoles();$permissions = $user->getAllPermissions();

获取用户的角色集合 collection

$roles = $user->getRoleNames(); // Returns a collection

返回指定角色的用户 | Returns only users with the role 'writer'

$users = User::role('writer')->get(); //

返回指定权限的用户

$users = User::permission('edit articles')->get();

用户有什么角色

$user->hasRole('writer');

验证类


检查是否有某个权限

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

检查是否有某个角色 | 或者列

$user->hasRole('writer');$user->hasAnyRole(Role::all());$user->hasAllRoles(Role::all());

传递 id 值进行判断是否有某个权限

$user->hasPermissionTo('1');$user->hasPermissionTo(Permission::find(1)->id);$user->hasPermissionTo($somePermission->id);

是否拥有一组权限

$user->hasAnyPermission(['edit articles', 'publish articles', 'unpublish articles']);

检查一个角色是否有某些权限 | 删除某些权限

$role->hasPermissionTo('edit articles'); $role->revokePermissionTo('edit articles'); // 删除

模板使用


@role('writer')    I am a writer!@else    I am not a writer...@endrole------------------------@hasrole('writer')    I am a writer!@else    I am not a writer...@endhasrole------------------------@can('edit articles') // 拥有某个权限 可执行操作//@endcan

数据填充

use Illuminate\Database\Seeder;use Spatie\Permission\Models\Role;use Spatie\Permission\Models\Permission;class RolesAndPermissionsSeeder extends Seeder{    public function run()    {        // Reset cached roles and permissions        app()['cache']->forget('spatie.permission.cache');        // create permissions        Permission::create(['name' => 'edit articles']);        Permission::create(['name' => 'delete articles']);        Permission::create(['name' => 'publish articles']);        Permission::create(['name' => 'unpublish articles']);        // create roles and assign created permissions        $role = Role::create(['name' => 'writer']);        $role->givePermissionTo('edit articles');        $role = Role::create(['name' => 'moderator']);        $role->givePermissionTo(['publish articles', 'unpublish articles']);        $role = Role::create(['name' => 'super-admin']);        $role->givePermissionTo(Permission::all());    }}

提示:如果在数据库权限相关信息表的修改,必须掉用清除 缓存的方法

// 命令删除php artisan cache:forget spatie.permission.cache  app()['cache']->forget('spatie.permission.cache');

以上就是关于"Laravel中permission权限管理的扩展包怎么用"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

权限 角色 用户 管理 信息 内容 数据 文章 多个 数据库 模型 检查 知识 站长 篇文章 关联 生成 平常 普通 最高 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 瑰夏咖啡 互联网科技网 科技股互联网 智能科技公司是互联网公司吗 广州互联网科技公司 北京互联网科技有限公司 合肥互联网科技公司 紫鲸互联网科技 互联网公司会议桌创意科技软装饰 互联网时代科技改变生活 互联网和黑科技的看法 苏州五指互联网络科技有限 速维有品互联网信息科技(苏州)有限公司 互联网科技实习生岗位 雨阳互联网卡科技有限公司 皮皮虾互联网科技有限公司 领航科技大厦互联网公司 新氧科技和美国互联网有关系吗 广西泛欧互联网科技有限公司 恒生互联网科技趋势 小米移动互联网科技园 互联网科技公司简介 广东猪兼强互联网科技有限公司 中国 科技 互联网 奇士达互联网科技 互联网科技博主是什么意思 中国航天科技大学国际工业互联网 中国互联网十大科技股排名 元气玛特互联网科技公司是外包吗 好易买互联网科技
0