whitesunrise / guardian
适用于 Laravel 5.3+
Requires
- php: ~5.6|~7.0
- illuminate/cache: ~5.0
- illuminate/console: ~5.0
- illuminate/support: ~5.0
Requires (Dev)
- illuminate/database: ~5.0
- phpunit/phpunit: ~4.8
This package is not auto-updated.
Last update: 2024-09-20 20:31:31 UTC
README
这是为 White Sunrise, LLC 的软件和网页开发创建的私有 composer 仓库。
此软件包仍在开发中,不应在生产环境中使用
此软件包允许快速并经过测试的方式设置多认证用户验证和认证系统,包括自定义中间件、守卫、迁移和用于测试的种子器。此软件包仅在 Laravel 5.3 和 5.4 上进行过测试。以下为安装说明和其他信息。
关于 White Sunrise LLC
White Sunrise 自 2008 年以来一直在创建优秀的网站和基于云的软件。我们以创新和前沿的开发而闻名,为我们的客户提供定制解决方案。
了解更多关于我们的信息 这里。
安装
此软件包可以作为私有 composer 软件包轻松安装。以下为详细信息和文档。
Laravel 5.4
- 在您的 Laravel 项目目录中创建一个名为
packages
的文件夹,并将仓库克隆到该文件夹中
cd <project-root-directory> mkdir packages && cd packages git clone git@github.com:whitesunrise/guardian.git
- 将克隆的仓库添加到您的项目 composer.json 文件的
autoload
部分中
"autoload": { "classmap": [ "database" ], "psr-4": { "App\\": "app/", "WhiteSunrise\\Guardian\\": "packages/whitesunri/whitesunri/src/" } },
- 清除项目根目录中的 composer 和 artisan 自动加载
composer dumpautoload && php artisan clear-compiled
- 打开您的
config/app.php
并将以下内容添加到providers
数组中
WhiteSunrise\Guardian\GuardianServiceProvider::class,
- 在相同的
config/app.php
文件中,将以下内容添加到aliases
数组中
'Guardian' => WhiteSunrise\Guardian\Facades\GuardianFacade::class,
- 将软件包配置文件发布到 config/guardian.php
php artisan vendor:publish --provider="WhiteSunrise\Guardian\GuardianServiceProvider" --tag=config
-
打开您的
config/auth.php
并对 Admin User 类进行以下 3 项更改-
在
providers
数组中'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\Models\AdminUser::class, ], ],
-
在
guards
数组中'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'web_admin' => [ 'driver' => 'session', 'provider' => 'admins', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], ],
-
在
passwords
数组中'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], 'admins' => [ 'provider' => 'admins', 'table' => 'admin_password_resets', 'expire' => 60, ], ],
-
-
如果您想使用中间件(需要 Laravel 5.1 或更高版本,您还需要将以下内容添加到
app/Http/Kernel.php
中的routeMiddleware
数组中)
'role' => \WhiteSunrise\Guardian\Middleware\GuardianRole::class, 'permission' => \WhiteSunrise\Guardian\Middleware\GuardianPermission::class, 'ability' => \WhiteSunrise\Guardian\Middleware\GuardianAbility::class,
配置
在 config/auth.php
中设置正确的值。
要进一步自定义表名和模型命名空间,请编辑 config/guardian.php
配置文件。
用户
Guardian 使用 app/Models
目录来存储模型。如果您使用 [Laravel 的认证快速入门](https://laravel.net.cn/docs/5.4/authentication#authentication-quickstart) 生成您的用户模型和控制台,请确保您更新了配置文件中的值。
- 生成 Guardian 迁移
php artisan whitesunrise:guardian:make:migration all
这将生成 <timestamp>_guardian_create_roles_tables.php
和 <timestamp>_guardian_create_permissions_tables.php
迁移。现在您可以运行迁移。
php artisan migrate
迁移后,将出现五个新表
roles
- 存储角色记录permissions
- 存储权限记录role_users
- 存储角色与用户之间的多对多关系role_admin_users
- 存储角色与管理员用户之间的多对多关系permission_roles
- 存储角色与权限之间的多对多关系
模型
角色
通过运行以下命令在 app/models/Role.php
内生成新的 Role 模型
artisan whitesunrise:guardian:make:model role
Role 模型用于 User 和 AdminUser 模型。两者都有枢纽表以保持用户数据独立。Role 模型有四个主要属性
name
- 角色的唯一可读名称。例如:“用户管理员”、“项目所有者”、“Widget Co. 员工”。slug
- 角色的唯一名称,用于在应用层中查找角色信息。例如:“admin”、“owner”、“employee”。description
- 角色详细功能的说明。此字段为可选。parent_id
- 可选字段,用于从另一个角色继承权限。
Both parent_id
and description
are optional; their fields are nullable in the database.
或者,您可以通过扩展以下GuardianRole类来使用现有的角色模型。
namespace App\Models; use WhiteSunrise\Guardian\Models\GuardianRole; class Role extends GuardianRole { }
权限
在 app/models/Permission.php
中生成新的 Permission
模型,执行以下命令:
artisan whitesunrise:guardian:make:model permission
Permission
模型有三个主要属性
name
- 权限的唯一可读名称。例如:“创建帖子”、“编辑用户”、“发布付款”、“订阅邮件列表”。slug
- 权限的唯一名称,用于在应用层中查找权限信息。例如:“create-post”、“edit-user”、“post-payment”、“mailing-list-subscribe”。description
- 权限的更详细说明。
一般来说,将最后两个属性以句子形式考虑可能会有所帮助:“权限 name
允许用户 description
。”
或者,您可以通过扩展以下GuardianPermission类来使用现有的权限模型。
<?php namespace App\Models; use WhiteSunrise\Guardian\Models\GuardianPermission; class Permission extends GuardianPermission { }
用户
接下来,在现有的 User
模型中使用 GuardianUserTrait
特性。例如:
<?php namespace App\Models; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Support\Facades\Auth; use WhiteSunrise\Guardian\Traits\GuardianUserTrait; class User extends Authenticatable { use Notifiable; use GuardianUserTrait; // continued... }
这将启用与 Role
的关系,并为 User
模型添加以下方法
roles()
hasRole($roleSlug, $requireAll = false)
- 接受字符串或角色数组进行检查can($permissionSlug, $requireAll = false)
- 接受字符串或权限数组进行检查ability($roles, $permissions, $options)
- 更高级的角色和权限检查attachRoles($role)
detachRoles($role)
withoutRoles($roles)
静态方法,返回没有指定角色的用户withRoles($roles)
静态方法,返回具有指定角色的用户
管理员用户
接下来,在现有的 AdminUser
模型中使用 GuardianAdminUserTrait
特性。例如:
<?php namespace App\Models; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Support\Facades\Auth; use WhiteSunrise\Guardian\Traits\GuardianAdminUserTrait; class AdminUser extends Authenticatable { use Notifiable; use GuardianAdminUserTrait; // continued... }
这将启用与 Role
的关系,并为 User
模型添加以下方法
roles()
hasRole($roleSlug, $requireAll = false)
- 接受字符串或角色数组进行检查can($permissionSlug, $requireAll = false)
- 接受字符串或权限数组进行检查ability($roles, $permissions, $options)
- 更高级的角色和权限检查attachRoles($role)
detachRoles($role)
withoutRoles($roles)
静态方法,返回没有指定角色的用户withRoles($roles)
静态方法,返回具有指定角色的用户
别忘了转储 composer 自动加载
composer dump-autoload
种子文件
-
生成种子文件:
artisan whitesunrise:guardian:make:seeder
-
将种子文件添加到您的 DatabaseSeeder 类中
$this->call(GuardianRolesTableSeeder::class);
-
生成种子文件:
artisan whitesunrise:guardian:make:seeder
-
在您的 DatabaseSeeder 类中添加以下内容:
$this->call(GuardianRolesTableSeeder::class);
或运行artisan db:seed --class=GuardianRolesTableSeeder
-
在您的 DatabaseSeeder 类中添加以下内容:
$this->call(GuardianPermissionsTableSeeder::class);
或运行artisan db:seed --class=GuardianPermissionsTableSeeder
使用方法
概念
您可以使用 artisan 命令生成以下模型中的任何一个:
User
、AdminUser
、Role
和Permission
- 生成所有模型:
artisan whitesunrise:guardian:make:model all
- 生成特定模型:
artisan whitesunrise:guardian:make:model <user|admin_user|role|permission>
-
生成种子文件:
artisan whitesunrise:guardian:make:seeder
-
在您的 DatabaseSeeder 类中添加以下内容:
$this->call(GuardianRolesTableSeeder::class);
或运行artisan db:seed --class=GuardianRolesTableSeeder
-
在您的 DatabaseSeeder 类中添加以下内容:
$this->call(GuardianPermissionsTableSeeder::class);
或运行artisan db:seed --class=GuardianPermissionsTableSeeder
-
(可选) 在 config/app.php 的别名中添加 Facade
'Guardian' => WhiteSunrise\Guardian\Facades\GuardianFacade::class,
-
(可选) 生成模型:
artisan whitesunrise:guardian:make:model
-
在您的 User 模型中使用 GuardianUserTrait
<?php use WhiteSunrise\Guardian\Traits\GuardianUserTrait; class User extends Eloquent { use GuardianUserTrait; // add this trait to your user model ... }