acoustep / entrust-gui
Entrust 包的图形界面。
Requires
- php: >=5.5.0
- esensi/model: 0.5.*
- illuminate/console: ~5.0
- illuminate/support: ~5.0
- prettus/l5-repository: ^2.1
- zizaco/entrust: ~1.4.0
Requires (Dev)
- aedart/testing-laravel: 1.1.*
- codeception/codeception: 2.1.*
- codeception/mockery-module: 0.2.*
- mikey179/vfsstream: 1.5.*
- mockery/mockery: 0.9.*
- orchestra/testbench: ~3.1
- phpunit/phpunit: ~4.1
- symfony/console: 2.7.*
README
Entrust GUI 是一个管理界面,简化了用户、角色和权限管理 Entrust 包。
此包目前不用于处理用户身份验证、授权或注册。
安装
对于 Laravel 5.2 - 5.7,请查看 5.2 分支 的安装详情。
对于 Laravel 5.8+,请查看 5.8 分支 的安装详情。
将包添加到您的 composer.json
文件中
"acoustep/entrust-gui": "dev-master"
将服务提供者添加到您的 config/app.php
文件中
Acoustep\EntrustGui\EntrustGuiServiceProvider::class,
同样,将 Entrust 别名添加到您的 config/app.php
文件中。
'Entrust' => Zizaco\Entrust\EntrustFacade::class,
发布配置文件
php artisan vendor:publish --tag="config"
如果您尚未设置 Entrust,则创建迁移文件并运行迁移。
php artisan entrust:migration
php artisan migrate
Entrust GUI 使用 esensi/model,这意味着您可以在模型中设置验证规则。
要生成 User
、Role
和 Permission
模型,请运行 entrust-gui:models
命令。
php artisan entrust-gui:models
如果您更喜欢调整当前模型文件,请参阅 手动创建模型 部分。
默认情况下,所有三个文件都发布到 app_path()
目录。您可以分别指定文件和位置。
将 Entrust GUI 中间件添加到 app\Http\Kernel.php
。此中间件将允许具有 admin
角色的用户访问 Entrust GUI,并拒绝其他用户。
protected $routeMiddleware = [
// ...
'entrust-gui.admin' => \Acoustep\EntrustGui\Http\Middleware\AdminAuth::class,
];
到此为止,您就可以开始了。有关如何使用此包,请参阅入门指南。
入门指南
访问 Entrust GUI
默认情况下,所有路由都以前缀 /entrust-gui
开头。
- 用户:
/entrust-gui/users
- 角色:
/entrust-gui/roles
- 权限:
/entrust-gui/permissions
您可以通过编辑 config/entrust-gui.php
中的 route-prefix
来更改此前缀。
'route-prefix' => 'admin'
如果您未以管理员身份登录且默认使用 entrust-gui.admin
中间件,则将指向 /entrust-gui/users
的应用程序将重定向到 /auth/login
。
如果您尚未设置 Laravel 身份验证,您将看到 NotFoundHttpException
异常。有关在 Laravel 5.1 中设置登录系统的说明,请参阅 Laravel 的 身份验证 文档。
中间件
默认情况下,Entrust GUI 使用 entrust-gui.admin
作为中间件。这允许具有 admin
角色的登录用户访问它。
您可以在 config/entrust-gui.php
的 middleware
设置中更改中间件。
如果您希望在没有中间件的情况下测试系统,请转到 config/entrust-gui.php
并将中间件设置为 null
。
'middleware' => null,
如果您想更改具有访问 admin
中间件权限的角色名称,请更新配置文件中的 middleware-role
。
"middleware-role" => 'sudo-admin',
布局
要使用自己的布局,请将 config/entrust-gui.php
中的 layout
键覆盖为要使用的模板。
"layout" => "app", // located in views/app.blade.php
每个模板都会产生 heading
和 content
,所以请确保您的新布局有这些部分。
<html>
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<h1>@yield('heading')</h1>
@include('entrust-gui::partials.notifications')
@yield('content')
</body>
</html>
编辑模板
要编辑模板文件,您首先需要发布它们
php artisan vendor:publish --tag="views"
所有文件都存储在 resources/views/vendor/entrust-gui
目录中。
路由
您可能希望在自己的模板中链接到页面。EntrustGUI遵循Laravel的Route::resource
方法,但show
方法除外。
route('entrust-gui::users.index')
route('entrust-gui::users.create')
route('entrust-gui::users.destroy', $id)
route('entrust-gui::users.update', $id)
route('entrust-gui::users.edit', $id)
事件
以下事件类可用
UserCreatedEvent
、UserDeletedEvent
、UserUpdatedEvent
。RoleCreatedEvent
、RoleDeletedEvent
、RoleUpdatedEvent
。PermissionCreatedEvent
、PermissionDeletedEvent
、PermissionUpdatedEvent
。
示例事件监听器
<?php
namespace App\Listeners;
use Acoustep\EntrustGui\Events\UserCreatedEvent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Log;
class UserCreatedListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param UserCreatedEvent $event
* @return void
*/
public function handle(UserCreatedEvent $event)
{
Log::info('created: '.$event->user->email);
}
}
将您需要的监听器添加到app/Providers/EventServiceProvider.php
。
protected $listen = [
'Acoustep\EntrustGui\Events\UserCreatedEvent' => [
'App\Listeners\UserCreatedListener',
],
'Acoustep\EntrustGui\Events\UserUpdatedEvent' => [
'App\Listeners\UserUpdatedListener',
],
'Acoustep\EntrustGui\Events\UserDeletedEvent' => [
'App\Listeners\UserDeletedListener',
],
'Acoustep\EntrustGui\Events\RoleCreatedEvent' => [
'App\Listeners\RoleCreatedListener',
],
'Acoustep\EntrustGui\Events\RoleUpdatedEvent' => [
'App\Listeners\RoleUpdatedListener',
],
'Acoustep\EntrustGui\Events\RoleDeletedEvent' => [
'App\Listeners\RoleDeletedListener',
],
'Acoustep\EntrustGui\Events\PermissionCreatedEvent' => [
'App\Listeners\PermissionCreatedListener',
],
'Acoustep\EntrustGui\Events\PermissionUpdatedEvent' => [
'App\Listeners\PermissionUpdatedListener',
],
'Acoustep\EntrustGui\Events\PermissionDeletedEvent' => [
'App\Listeners\PermissionDeletedListener',
]
];
编辑翻译
运行发布翻译命令
php artisan vendor:publish --tag="translations"
翻译随后发布到resources/lang/vendor/entrust-gui
。
将密码确认字段添加到用户
更新您的User
模型到以下
<?php namespace App;
use Esensi\Model\Contracts\HashingModelInterface;
use Esensi\Model\Contracts\PurgingModelInterface;
use Esensi\Model\Contracts\ValidatingModelInterface;
use Esensi\Model\Traits\HashingModelTrait;
use Esensi\Model\Traits\PurgingModelTrait;
use Esensi\Model\Traits\ValidatingModelTrait;
use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Database\Eloquent\Model;
use Zizaco\Entrust\Traits\EntrustUserTrait;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract, ValidatingModelInterface, HashingModelInterface, PurgingModelInterface
{
use Authenticatable, CanResetPassword, ValidatingModelTrait, EntrustUserTrait, PurgingModelTrait, HashingModelTrait;
protected $throwValidationExceptions = true;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name', 'email', 'password', 'password_confirmation'];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = ['password', 'remember_token'];
protected $purgeable = [
'password_confirmation',
];
protected $hashable = ['password'];
protected $rulesets = [
'creating' => [
'email' => 'required|email|unique:users',
'password' => 'required|confirmed',
],
'updating' => [
'email' => 'required|email|unique:users',
'password' => 'confirmed',
],
];
}
更新config/entrust-gui.php
'confirmable' => true,
生成模型命令选项
生成特定模型
php artisan entrust-gui:models User
更改模型目录目标位置
php artisan entrust-gui:models --path=new/path
跳过覆盖现有文件的确认提示
php artisan entrust-gui:models --force
手动创建模型
以下是User
、Role
和Permission
模型。确保这些参数和特性被包含以使包按预期工作。
app/User.php
<?php namespace App;
use Esensi\Model\Contracts\HashingModelInterface;
use Esensi\Model\Contracts\ValidatingModelInterface;
use Esensi\Model\Traits\HashingModelTrait;
use Esensi\Model\Traits\ValidatingModelTrait;
use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Database\Eloquent\Model;
use Zizaco\Entrust\Traits\EntrustUserTrait;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract, ValidatingModelInterface, HashingModelInterface
{
use Authenticatable, CanResetPassword, ValidatingModelTrait, EntrustUserTrait, HashingModelTrait;
protected $throwValidationExceptions = true;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name', 'email', 'password'];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = ['password', 'remember_token'];
protected $hashable = ['password'];
protected $rulesets = [
'creating' => [
'email' => 'required|email|unique:users',
'password' => 'required',
],
'updating' => [
'email' => 'required|email|unique:users',
'password' => '',
],
];
}
app/Role.php
<?php namespace App;
use Esensi\Model\Contracts\ValidatingModelInterface;
use Esensi\Model\Traits\ValidatingModelTrait;
use Zizaco\Entrust\EntrustRole;
class Role extends EntrustRole implements ValidatingModelInterface
{
use ValidatingModelTrait;
protected $throwValidationExceptions = true;
protected $fillable = [
'name',
'display_name',
'description',
];
protected $rules = [
'name' => 'required|unique:roles',
'display_name' => 'required|unique:roles',
];
}
app/Permission.php
<?php namespace App;
use Esensi\Model\Contracts\ValidatingModelInterface;
use Esensi\Model\Traits\ValidatingModelTrait;
use Zizaco\Entrust\EntrustPermission;
class Permission extends EntrustPermission implements ValidatingModelInterface
{
use ValidatingModelTrait;
protected $throwValidationExceptions = true;
protected $fillable = [
'name',
'display_name',
'description',
];
protected $rules = [
'name' => 'required|unique:permissions',
];
}
升级指南 / 破坏性变更
0.6
包括一个新配置键,"unauthorized-url",允许您设置未授权时的重定向。如果找不到此键,它将使用旧URL,/auth/login。默认设置为/auth/login,以匹配Laravel 5.1的认证路由文档。
0.3.* 到 0.4.0
从0.4.0开始,Entrust GUI从dwightwatson/validating
切换到esensi/model
。
密码散列已从包移动到User
模型。
将您的User
模型更新到最新文档中的版本。
将'confirmable' => false,
添加到您的配置文件中。
如果您打算使用confirmable选项并且已经发布了视图,请将以下内容添加到您的resources/views/vendor/entrust-gui/users/partials/form.blade.php
模板
@if(Config::get('entrust-gui.confirmable') === true)
<div class="form-group">
<label for="password">Confirm Password</label>
<input type="password" class="form-control" id="password_confirmation" placeholder="Confirm Password" name="password_confirmation">
</div>
@endif
支持Entrust GUI
Entrust GUI完全由我个人维护。如果您想帮忙,请随时提出功能请求或建议的问题。如果您想买我一杯咖啡表示感谢,请查看我的ko-fi页面。
待办事项
- 高级中间件配置
- 更多测试
- 更多文档