Laravel5.5 使用 spatie/Laravel-permission 实现权限分配
心有猛虎 细嗅蔷薇
最近想用Laravel做一个权限管理 但是不知道该如何下手 就查了一些资料 发现了这个扩展包 用着感觉真好…
费话就不多说了 直接开始
One
安装 Laravel 5.5
composer create-project laravel/laravel Role --prefer-dist
安装成功后在本地配置环境 我使用的是phpstudy 如何配置我就不写了 基本都会
打开浏览器出现这个界面 就OK了!
Two
根据自己项目配置Laravel .env 文件
开始安装扩展
composer 安装:
composer require spatie/laravel-permission
发布 migration :
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
发布成功 会在database\migrations 下生成数据迁移文件
数据库版本太低 修改app里的providers里的AppServiceProvider.php文件
在boot()方法里写
\Schema::defaultStringLength(191);
这是设置数据库默认的字符长度
然后执行数据迁移
php artisan migrate
即 迁移成功
Three
首先,添加 Spatie\Permission\Traits\HasRoles trait 到 User 模型:
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// ...
}
在web写 一个测试路由
Route::get('/test','[email protected]');
去控制器里写一个测试 添加角色
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
class TestController extends Controller
{
public function test()
{
//添加角色
Role::create(['name' => 'writer']);
}
}
需 use Role 和 Permission 这两个 Eloquent 模型
这时数据库便会新增一条数据
添加权限:
Permission::create(['name' => 'edit articles']);
将多个权限同步赋予到一个角色:
$role->syncPermissions($permissions);
$permissions 可以是一个数组 例如:
$role->syncPermissions(
[
'edit articles',
'B'
]
);
还有其他方法可以查看 这篇文章
然后在模板中判断角色是否拥有权限:
@can('edit articles')
//
@endcan
最基本的权限已经设置好了
更多高级用法 可以查看文档完成 如果碰到了 还会继续更新
有问题 请留言