前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel 多角色用户权限

Laravel 多角色用户权限

作者头像
切图仔
发布2022-09-14 15:01:43
1.4K0
发布2022-09-14 15:01:43
举报
文章被收录于专栏:生如夏花绚烂生如夏花绚烂

Laravel 自带了简单的用户授权方案:

Gates 和 Policies $this->authorize () 方法 @can@cannot Blade 命令

不过这种自带的方案不容易实现用户,角色,权限的需求,我们可以使用第三放扩展包—Laravel-permission

基本使用

1.通过composer安装

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

2.生成数据库迁移文件

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

3.执行迁移文件 php artisan migrate

4.数据表结构

  1. roles —— 角色的模型表;
  2. permissions —— 权限的模型表;
  3. model_has_roles —— 模型与角色的关联表,用户拥有什么角色在此表中定义,一个用户能拥有多个角色;
  4. role_has_permissions —— 角色拥有的权限关联表,如管理员拥有查看后台的权限都是在此表定义,一个角色能拥有多个权限
  5. model_has_permissions —— 模型与权限关联表,一个模型能拥有多个权限。

5.生成配置信息 php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"

config/permission.php

6.获取扩展包提供的所有权限和角色的操作方法 在用户模型中使用laravel-permission 提供的 Trait —— HasRoles

代码语言:javascript
复制
User.php

use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable implements MustVerifyEmailContract
{
    use HasRoles;

常用方法 1.新键角色

代码语言:javascript
复制
use Spatie\Permission\Models\Role;
$role = Role::create(['name' => 'Founder']);

2.给角色添加权限

代码语言:javascript
复制
use Spatie\Permission\Models\Permission;
Permission::create(['name' => 'manage_contents'])//创建权限
$role->givePermissionTo('manage_contents');//将权限赋予角色

3.为用户添加角色

代码语言:javascript
复制
// 单个角色
$user->assignRole('Founder');
// 多个角色
$user->assignRole('writer', 'admin');

4.检查用户是否有相关角色

代码语言:javascript
复制
// 是否是站长
$user->hasRole('Founder');

// 是否拥有至少一个角色
$user->hasAnyRole(Role::all());  

// 是否拥有所有角色
$user->hasAllRoles(Role::all());  

5.检查用户是否有相关权限

代码语言:javascript
复制
// 检查用户是否有某个权限
$user->can('manage_contents'); 

// 检查角色是否拥有某个权限
$role->hasPermissionTo('manage_contents'); 

6.直接给用户添加权限

代码语言:javascript
复制
// 为用户添加『直接权限』
$user->givePermissionTo('manage_contents');

// 获取所有直接权限
$user->getDirectPermissions() 

案例 如果用户有管理内容权限则通过

代码语言:javascript
复制
<?php

namespace App\Policies;

use Illuminate\Auth\Access\HandlesAuthorization;

class Policy
{
    use HandlesAuthorization;

    public function __construct()
    {
        //
    }

     public function before($user, $ability)
    {
        // 如果用户拥有管理内容的权限的话,即授权通过
        if ($user->can('manage_contents')) {
            return true;
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本使用
相关产品与服务
数据传输服务
腾讯云数据传输服务(Data Transfer Service,DTS)可帮助用户在业务不停服的前提下轻松完成数据库迁移上云,利用实时同步通道轻松构建高可用的数据库多活架构,通过数据订阅来满足商业数据挖掘、业务异步解耦等场景需求。同时,DTS 还提供私有化独立输出版本 DTS-DBbridge,支持异构数据库和同构数据库之间迁移和同步,可以帮助企业实现完整数据库迁移(如 Oracle)。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档