acoustep/entrust-gui

Entrust 包的图形界面。

0.6.0 2016-03-03 19:42 UTC

This package is auto-updated.

Last update: 2024-09-07 16:03:45 UTC


README

Code Climate Build Status Latest Stable Version Total Downloads Latest Unstable Version License ko-fi

Entrust GUI 是一个管理界面,简化了用户、角色和权限管理 Entrust 包。

此包目前不用于处理用户身份验证、授权或注册。

User Panel Preview

安装

对于 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,这意味着您可以在模型中设置验证规则。

要生成 UserRolePermission 模型,请运行 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.phpmiddleware 设置中更改中间件。

如果您希望在没有中间件的情况下测试系统,请转到 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

每个模板都会产生 headingcontent,所以请确保您的新布局有这些部分。

<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)

事件

以下事件类可用

  • UserCreatedEventUserDeletedEventUserUpdatedEvent
  • RoleCreatedEventRoleDeletedEventRoleUpdatedEvent
  • PermissionCreatedEventPermissionDeletedEventPermissionUpdatedEvent

示例事件监听器

<?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

手动创建模型

以下是UserRolePermission模型。确保这些参数和特性被包含以使包按预期工作。

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页面

待办事项

  • 高级中间件配置
  • 更多测试
  • 更多文档