permission RBAC 权限管理
<h2>项目初始化</h2>
<pre><code class="language-bash"># 指定 laravel 版本安装
composer create-project --prefer-dist laravel/laravel permission56 5.6.*
# 不指定 laravel 版本安装
composer create-project --prefer-dist laravel/laravel permission
cd permission
composer require spatie/laravel-permission
# 安装指定版本 permission,比如在 laravel 5.6 版本下安装
composer require "spatie/laravel-permission:~2.7"
# 到 vendor 目录下查看是否有 spatie 文件夹及子文件夹 laravel-permission</code></pre>
<h2>创建数据表</h2>
<ul>
<li>修改 .env 文件数据库连接帐号信息</li>
</ul>
<h5>迁移文件到 database/migrations 目录下</h5>
<pre><code class="language-php">// 将扩展包提供的数据库迁移文件发布到 database/migrations 目录下
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"</code></pre>
<ul>
<li>
<p>文件 vendor/spatie/laravel-permission/database/migrations/create_permission_tables.php.stub </p>
<p>复制到 permission56/database/migrations 目录下</p>
</li>
</ul>
<h5>生成相应数据表</h5>
<pre><code class="language-php">// 根据database/migrations 目录下 create_permission_tables.php数据库迁移文件生成相应的数据表
php artisan migrate</code></pre>
<h5>php artisan migrate生成数据表有</h5>
<table>
<thead>
<tr>
<th>表名</th>
<th>说明</th>
<th>表名</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>migrations</td>
<td>迁移</td>
<td>model_has_permissions</td>
<td>模型有权限</td>
</tr>
<tr>
<td>model_has_roles</td>
<td>模型有角色</td>
<td>password_resets</td>
<td>密码重置</td>
</tr>
<tr>
<td>permission_role</td>
<td>权限角色</td>
<td>permissions</td>
<td>权限</td>
</tr>
<tr>
<td>role_user</td>
<td>角色用户</td>
<td>users</td>
<td>用户</td>
</tr>
</tbody>
</table>
<h2>配置文件</h2>
<pre><code class="language-php">// 扩展包提供的权限配置文件 permission.php 发布到 config 目录下,方便对默认配置进行修改
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"</code></pre>
<ul>
<li>配置文件 vendor/spatie/laravel-permission/config/permission.php 就复制到 config/permission.php</li>
</ul>
<h2>模型类调整</h2>
<ul>
<li>app/User.php 文件中使用 <code>HasRoles</code> trait 提供权限相关方法</li>
</ul>
<pre><code class="language-php">use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
}</code></pre>
<h2>构建视图页面所需表单</h2>
<h5>查看 laravel 5.6 版本下安装 laravelcollective/html,其所需要的对应版本是多少</h5>
<ul>
<li><a href="https://packagist.org/packages/laravelcollective">https://packagist.org/packages/laravelcollective</a></li>
<li>laravelcollective/html 版本为:5.6</li>
</ul>
<pre><code class="language-bash">composer require laravelcollective/html 5.6</code></pre>
<h2>基本使用</h2>
<ul>
<li>app/User.php 文件中</li>
</ul>
<pre><code class="language-php">use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
class User extends Authenticatable
{
public function testRole() {
// 创建新的角色和权限
$role = Role::create(['name' => 'writer']);
$permission = Permission::create(['name' => 'edit articles']);
}
}</code></pre>
<h2>使用实例</h2>
<ul>
<li>为用户分配文章操作权限</li>
</ul>
<pre><code class="language-php">// 生成用户登录注册所需的路由、控制器、视图等代码文件
php artisan make:auth
// 到 app/Http/Controllers/Auth 路径下查看相关文件</code></pre>