jmkim / laravel-entrust-gui
Shanmuga's LaravelEntrust for Laravel 5+ (5, 6, 7, 8 和 9) 的 GUI
Requires
- php: >=7.1.3
- esensi/model: 0.6.*
- illuminate/console: ~5.8.0
- illuminate/support: ~5.8.0
- prettus/l5-repository: ^2.6
- watson/validating: 3.2.0 as 2.0.1
Requires (Dev)
- codeception/codeception: 2.1.*
- codeception/mockery-module: 0.2.*
- mikey179/vfsstream: 1.5.*
- mockery/mockery: 0.9.*
- phpunit/phpunit: ~4.1
- symfony/console: ^4.2
This package is auto-updated.
Last update: 2024-09-08 11:15:12 UTC
README
Entrust GUI 是一个 Admin 界面,它使 Shanmuga's Laravel Entrust 包的用户、角色和权限管理更加容易。
此包目前不用于处理用户身份验证、授权或注册。
免责声明
Entrust GUI 完全由 Mitch Stanley (@acoustep) 编写。原始代码库位于 https://github.com/acoustep/entrust-gui。
此包是 Shanmuga's Laravel Entrust 的移植。
- (Laravel 5,原始但未维护) acoustep's Entrust GUI for Zizaco's ENTRUST
- (Laravel 5 ~ 9,移植和维护) jmkim's Laravel Entrust GUI (此包) for Shanmuga's Laravel Entrust
您可以通过将
Acoustep
替换为Jmkim
acoustep
替换为jmkim
安装
将包添加到您的 composer.json
文件
"jmkim/laravel-entrust-gui": "6.x-dev",
"shanmuga/laravel-entrust": "3.x-dev",
"watson/validating": "3.2.0 as 2.0.1"
将服务提供者添加到您的 config/app.php
文件
Jmkim\EntrustGui\EntrustGuiServiceProvider::class,
同样在 config/app.php
文件中添加 Entrust 别名。
'Entrust' => Shanmuga\LaravelEntrust\LaravelEntrustFacade::class,
发布配置文件
php artisan vendor:publish --tag="config"
将 table
键与值 users
添加到 config/auth.php
文件中的 providers.users
数组。
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
'table' => 'users',
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
如果您尚未设置 Entrust,则创建迁移文件并运行迁移。
php artisan entrust:migration
php artisan migrate
如果您看到以下错误
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table
`users` add unique `users_email_unique`(`email`))
请将以下内容添加到您的 app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Schema;
...
public function boot() {
Schema::defaultStringLength(191);
}
如果您看到此错误
ReflectionException : Method Shanmuga\LaravelEntrust\MakeMigrationCommand::handle() does not exist
这是 Entrust
的问题,可以通过访问 vendor-> shanmuga-> laravel-entrust-> src-> commands-> MakeMigrationCommand.php
并将 fire()
更改为 handle()
来临时修复。重新运行迁移。有关更多详细信息,请参阅 此处。完成此操作后,重新运行迁移命令。
最后,如果您看到此错误
(errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `role_user` add constraint `role_user_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete cascade on update cascade)
转到新创建的迁移文件(entrust_setup_tables
)并更新 role_user
中的外键约束 user_id
以使用 bigInteger
。
Schema::create('role_user', function (Blueprint $table) {
$table->bigInteger('user_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')
->onUpdate('cascade')->onDelete('cascade');
$table->foreign('role_id')->references('id')->on('roles')
->onUpdate('cascade')->onDelete('cascade');
$table->primary(['user_id', 'role_id']);
});
之后重新运行 entrust 迁移(您可能还需要清理数据库)。
Entrust GUI 使用 esensi/model,这意味着您可以在模型中设置验证规则。
要生成 User
、Role
和 Permission
模型,请运行 entrust-gui:models
命令。
php artisan entrust-gui:models
如果您更喜欢手动调整当前模型文件,请参阅 手动创建模型 部分。
默认情况下,所有三个文件都发布到 app_path()
目录。您可以分别指定文件和位置。
将 Entrust GUI 中间件添加到 app\Http\Kernal.php
。此中间件将允许具有 admin
(区分大小写)角色的用户访问 Entrust GUI,并拒绝其他用户。
protected $routeMiddleware = [
// ...
'entrust-gui.admin' => \Jmkim\EntrustGui\Http\Middleware\AdminAuth::class,
];
最后,目前Entrust存在一个问题,需要您将缓存驱动设置为array。这在未来可能会改变。您可以在您的.env
文件中更改此设置。
CACHE_DRIVER=array
到此为止,您就可以开始了。请参阅“入门”部分了解如何使用此软件包。
入门
使用Laravel身份验证
如果您还没有设置,请运行auth命令。
php artisan make:auth
访问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
,删除entrust-gui.admin
中间件,并保留web
,这是Laravel 5.2中闪存消息正确工作的必要条件。
'middleware' => 'web',
如果您想更改具有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 Jmkim\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 = [
'Jmkim\EntrustGui\Events\UserCreatedEvent' => [
'App\Listeners\UserCreatedListener',
],
'Jmkim\EntrustGui\Events\UserUpdatedEvent' => [
'App\Listeners\UserUpdatedListener',
],
'Jmkim\EntrustGui\Events\UserDeletedEvent' => [
'App\Listeners\UserDeletedListener',
],
'Jmkim\EntrustGui\Events\RoleCreatedEvent' => [
'App\Listeners\RoleCreatedListener',
],
'Jmkim\EntrustGui\Events\RoleUpdatedEvent' => [
'App\Listeners\RoleUpdatedListener',
],
'Jmkim\EntrustGui\Events\RoleDeletedEvent' => [
'App\Listeners\RoleDeletedListener',
],
'Jmkim\EntrustGui\Events\PermissionCreatedEvent' => [
'App\Listeners\PermissionCreatedListener',
],
'Jmkim\EntrustGui\Events\PermissionUpdatedEvent' => [
'App\Listeners\PermissionUpdatedListener',
],
'Jmkim\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\PurgingModelInterface;
use Esensi\Model\Traits\PurgingModelTrait;
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 Shanmuga\LaravelEntrust\Traits\LaravelEntrustUserTrait;
use Jmkim\EntrustGui\Contracts\HashMethodInterface;
use Hash;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract, ValidatingModelInterface, HashMethodInterface, PurgingModelInterface
{
use Authenticatable, CanResetPassword, ValidatingModelTrait, EntrustUserTrait, PurgingModelTrait;
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',
],
];
public function entrustPasswordHash()
{
$this->password = Hash::make($this->password);
$this->forceSave();
}
}
更新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\ValidatingModelInterface;
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 Shanmuga\LaravelEntrust\Traits\LaravelEntrustUserTrait;
use Jmkim\EntrustGui\Contracts\HashMethodInterface;
use Hash;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract, ValidatingModelInterface, HashMethodInterface
{
use Authenticatable, CanResetPassword, ValidatingModelTrait, EntrustUserTrait;
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' => '',
],
];
public function entrustPasswordHash()
{
$this->password = Hash::make($this->password);
$this->save();
}
}
app/Role.php
<?php namespace App;
use Esensi\Model\Contracts\ValidatingModelInterface;
use Esensi\Model\Traits\ValidatingModelTrait;
use Shanmuga\LaravelEntrust\LaravelEntrustRole;
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 Shanmuga\LaravelEntrust\LaravelEntrustPermission;
class Permission extends EntrustPermission implements ValidatingModelInterface
{
use ValidatingModelTrait;
protected $throwValidationExceptions = true;
protected $fillable = [
'name',
'display_name',
'description',
];
protected $rules = [
'name' => 'required|unique:permissions',
];
}
用户的自定义查询、排序和筛选
如果您想搜索、排序和筛选用户,可以使用l5-repository searchable fields功能。
在您的entrust-gui.php配置文件中,添加您希望可搜索的字段
"users" => [
'fieldSearchable' => [
'email'
],
],
您现在可以创建如下链接
- https://.dev/entrust-gui/users?search=John%20Doe
- https://.dev/entrust-gui/users?search=email&searchFields=email:like
- https://.dev/entrust-gui/users?search=email&searchFields=email:like&orderBy=email&sortedBy=asc
- http://tcascompressors.dev/admin/users?filter=email
您可以在此处了解更多关于这些选项的信息。
升级指南 / 破坏性更改
5.2 分支
将以下内容添加到 config/entrust-gui.php
配置文件中,以启用自定义排序和筛选:
"users" => [
'fieldSearchable' => [],
],
可选地移除 Esensi\Model\Traits\HashingModelTrait
。用 Jmkim\EntrustGui\Contracts\HashMethodInterface
替换,并允许用户在 Entrust GUI 中设置自己的密码哈希方法。对于默认的 Laravel 5.2 Auth,建议在您的 User 模型中使用以下片段。
use Jmkim\EntrustGui\Contracts\HashMethodInterface;
use Hash;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract, ValidatingModelInterface, HashMethodInterface
// ...
public function entrustPasswordHash()
{
$this->password = hash::make($this->password);
$this->save();
}
}
0.6
包含一个新的配置键,"unauthorized-url"
,允许您设置用户未被授权时的重定向。如果找不到此键,它将使用旧的重定向地址,/auth/login
。默认设置为 /login
,以匹配 Laravel 5.2 内置的认证路由。
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
如果您想帮忙,请随时提交有关功能请求或建议的问题。
待办事项
- 高级中间件配置
- 更多测试
- 更多文档
- 动画视频预览