erenmustafaozdal/laravel-user-module

laravel 5.1 用户、角色和认证模块包

v0.1.5 2016-08-23 11:32 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:42:15 UTC


README

Laravel 5.1 Source License

Laravel 用户模块 是一个用于 Laravel 5.1 项目的用户、角色和登录操作模块包。此包除了用户界面(视图)之外,还包含所有后台操作。如果您想包含视图,可以使用 Laravel Modules Core 包来完全拥有该模块。

  1. 安装
    1. 文件发布
    2. 迁移
  2. 使用
    1. 配置文件
      1. 通用设置
      2. URL 设置
      3. 视图设置
      4. 模型设置
    2. 视图设计
      1. 模型使用
        1. 用户
        2. 角色
      2. 路由
        1. 登录、注销、注册路由
        2. 用户路由
        3. 用户角色路由
      3. 表单字段
        1. 登录、注销、注册表单
        2. 用户表单
        3. 用户角色表单
      4. 操作权限表单
    3. 审核
    4. 事件
      1. 登录、注销、注册事件
      2. 用户事件
      3. 用户角色事件
  3. 许可证

安装

可以使用以下代码使用 Composer 安装此包。

composer require erenmustafaozdal/laravel-user-module

或者,将以下内容添加到 composer.json 文件中,并更新包。

{
    "require": {
        "erenmustafaozdal/laravel-user-module": "~0.1"
    }
}
$ composer update

完成后,需要将服务提供者添加到项目的 config/app.php 文件中。

ErenMustafaOzdal\LaravelUserModule\LaravelUserModuleServiceProvider::class,

❗ 如果您将使用 Laravel Modules Core 包,则需要在上方定义该包的服务提供者文件。

文件发布

Laravel User Module 包的文件可以使用以下代码发布。

php artisan vendor:publish --provider="ErenMustafaOzdal\LaravelUserModule\LaravelUserModuleServiceProvider"

迁移

发布文件后,需要进行迁移操作。

❗ 在迁移操作之前,请删除 Laravel 的默认迁移文件。Sentinel 将添加自己的迁移文件。

❗ 在 Sentinel 的 ...migration_cartalyst_sentinel.php 迁移文件中,需要对 Laravel User Module 进行一些特定的修改。在确定 users 表列的行之后,在 last_name 列之后添加以下内容。

$table->string('last_name')->nullable();        // bu satırdan sonra
$table->boolean('is_active')->default(0);       // bu satırı eklemelisin
$table->boolean('is_super_admin')->default(0);  // bu satırı da eklemelisin
$table->string('photo')->nullable();            // ve arkasından bu satırı

然后,您可以执行迁移操作。

php artisan migrate

❗ 对于一些操作,例如在用户成功注册后发送激活电子邮件,您需要在 App\Providers\EventServiceProvider 中的 $subscribe 数组属性中添加 ErenMustafaOzdal\LaravelUserModule\Listeners\LaravelUserModuleListener 监听器。

protected $subscribe = [
    'ErenMustafaOzdal\LaravelUserModule\Listeners\LaravelUserModuleListener',
];

您可以通过 config/laravel-user-module.php 文件来更改激活电子邮件的 blade 模板。

激活电子邮件 blade 模板中发送用户信息(user)和 Sentinel 激活对象(activation)。您可以在电子邮件中的激活链接中添加代码 $activation->code

❗ 在包的依赖中,需要更新 Sentinel 的配置文件(config/cartalyst.sentinel.php)中的 usersroles 模型值。

'users' => [
    'model' => 'App\User',
],
'roles' => [
    'model' => 'App\Role',
],

最后,需要适当地定义 App\UserApp\Role 模型。为此,需要将 App\User 模型从 ErenMustafaOzdal\LaravelUserModule\User 模型扩展,将 App\Role 模型从 ErenMustafaOzdal\LaravelUserModule\Role 模型扩展。

namespace App;

use ErenMustafaOzdal\LaravelUserModule\User as EMOUser;

class User extends EMOUser
{
    //
}
namespace App;

use ErenMustafaOzdal\LaravelUserModule\Role as EMORole;

class Role extends EMORole
{
    //
}

使用

安装完成后;如果包含 Laravel Modules Core 包,则将在 proje.dev/login 地址上完全欢迎您。

❗ 如果文本显示不正确,这是由于 Laravel Modules Core 包的英文语言文件尚未准备好的原因。因此,您需要在项目的 config/app.php 文件中添加 'locale' => 'tr' 的定义。

❗ 当首次用户登录时,您将无法访问任何路由。为了防止这种情况,您需要在数据库中 is_super_admin 列中将其设置为 1。这样,您就可以以具有所有权限的方式继续操作。

配置文件

通用设置

包中使用的通用设置。这是在配置文件中根目录下找到的设置。

URL 设置

这些设置定义了浏览器地址栏中将显示的地址。这是在配置文件的 url 区域中找到的设置。

例如:使用 activate_route 设置,激活页面地址被定义为 account-activate。这样,地址栏将显示类似以下的内容: www.siteadi.com/account-activate/{id}/{code}

视图设置

这些设置定义了包将要使用的视图。这是在配置文件的 views 区域下找到的设置。这里的值默认为 Laravel Modules Core 包的视图。

模型设置

包中使用的一些模型相关的设置。目前只有 User 模型的设置。这个设置位于配置文件的 user 区域。

视图设计

包与 Laravel Modules Core 包一起直接可用。但您也可以设计自己的自定义视图。这部分是针对自定义设计的一个指南。

模型使用

此部分包含有关 UserRole 模型的属性和方法的详细信息。这些方法和属性可以在 App\UserApp\Role 中覆盖。

用户

####### 通用特性

  1. protected $table = 'users'
  2. protected $fillable = ['first_name', 'last_name', 'email', 'password', 'is_active', 'photo','permissions']
  3. protected $hidden = ['password', 'remember_token']

####### $user->getPhoto() 以 HTML img 标签或仅以 URL 的形式返回用户照片。如果没有照片,则返回默认照片

####### $user->first_name string 首字母大写的用户名

####### $user->last_name string 所有字母都大写的用户姓

####### $user->fullname string 用户名和姓的组合

####### $user->is_active boolean 返回用户是否活跃

####### $user->last_login string 以配置文件中的识别方式返回用户最后登录日期

####### $user->last_login_for_humans string 以可读的日期格式返回用户最后登录日期。例如:1周前

####### $user->last_login_table arraydisplay(last_login_for_humans) 和 timestamp 形式的数组返回用户最后登录日期。为在数据表中使用而创建

####### $user->permissions array 以数组形式返回用户操作权限

####### $user->permission_collect CollectionCollection 对象 形式返回用户操作权限

####### $user->created_at string 以配置文件中的识别方式返回用户注册日期

####### $user->created_at_for_humans string 以可读的日期格式返回用户注册日期。例如:1周前

####### $user->created_at_table arraydisplay(last_login_for_humans) 和 timestamp 形式的数组返回用户注册日期。为在数据表中使用而创建

####### $user->updated_at string 以配置文件中的识别方式返回用户更新日期

####### $user->updated_at_for_humans string 以可读的日期格式返回用户更新日期。例如:1周前

####### $user->updated_at_table arraydisplay(last_login_for_humans) 和 timestamp 形式的数组返回用户更新日期。为在数据表中使用而创建

角色

####### 通用特性

  1. protected $table = 'roles'
  2. protected $fillable = ['name', 'slug', 'permissions']

####### $role->name_uc_first string 首字母大写的用户角色名

####### $role->slug string 用户角色URL格式的版本

####### $role->permissions array 以数组形式返回用户角色的操作权限

####### $role->permission_collect CollectionCollection对象形式返回用户角色的操作权限

####### $role->created_at string 根据配置文件中的识别返回用户角色创建日期

####### $role->created_at_for_humans string 以可读性高的数据形式返回用户角色创建日期。例如:1周前

####### $role->created_at_table arraydisplay(last_login_for_humans)和timestamp形式保存用户角色创建日期的数组。为在Datatable中使用而创建

####### $role->updated_at string 根据配置文件中的识别返回用户角色更新日期

####### $role->updated_at_for_humans string 以可读性高的数据形式返回用户角色更新日期。例如:1周前

####### $role->updated_at_table arraydisplay(last_login_for_humans)和timestamp形式保存用户角色更新日期的数组。为在Datatable中使用而创建

路由

Laravel用户模块包除了拥有用于CRUD操作的路径外,还有许多可以通过ajax进行操作的路径。设计视图时可以使用这些路径。

下一节将介绍可用于路径中的表单元素。

登录、注销、注册路由

这些是用于登录、注销、注册、密码找回等操作的路径。

用户路由

这些路径包括用户CRUD操作以及一些包含ajax操作的路径。

用户角色路由

这些路径包括用户角色CRUD操作以及一些包含ajax操作的路径。

表单字段

在操作中使用的表单元素应与数据库表中的列名相同。以下列出了每个操作所需的元素列表。

❗以下列出的表单名称是必需的,顺序可以更改。

不要忘记在lang/.../validation.php文件中指定这些表单名称的文本值!此外,您需要为每种语言创建一个validation文件。

登录、注销、注册表单
  • register操作表单元素
    • first_name
    • last_name
    • email
    • password
    • password_confirmation
    • terms

RegisterRequest

public function rules()
{
    return [
        'first_name'    => 'required|max:255',
        'last_name'     => 'required|max:255',
        'email'         => 'required|unique:users|email|max:255',
        'password'      => 'required|confirmed|min:6|max:255',
        'terms'         => 'required|in:1|accepted'
    ];
}
  • login操作表单元素
    • email
    • password
    • remember

LoginRequest

public function rules()
{
    return [
        'email'         => 'required|email|max:255',
        'password'      => 'required|min:6|max:255',
    ];
}
  • forgetPassword操作表单元素
    • email

ForgetPasswordRequest

public function rules()
{
    return [
        'email'         => 'required|email|max:255',
    ];
}
  • resetPassword操作表单元素
    • email
    • password
    • password_confirmation

ResetPasswordRequest

public function rules()
{
    return [
        'email'         => 'required|email|max:255',
        'password'      => 'required|confirmed|min:6|max:255',
    ];
}

用户表单
  • store操作表单元素
    • first_name
    • last_name
    • email
    • password
    • password_confirmation
    • photo
    • x (如果需要裁剪图片,则裁剪后的左上角位置x值)
    • y (如果需要裁剪图片,则裁剪后的左上角位置y值)
    • width (如果需要裁剪图片,则裁剪后的宽度值)
    • height (如果需要裁剪图片,则裁剪后的高度值)
    • permissions

StoreRequest

public function rules()
{
    return [
        'first_name'    => 'required|max:255',
        'last_name'     => 'required|max:255',
        'email'         => 'required|unique:users|email|max:255',
        'password'      => 'required|confirmed|min:6|max:255',
        'photo'         => 'max:5120|image|mimes:jpeg,jpg,png',
        'x'             => 'integer',
        'y'             => 'integer',
        'width'         => 'integer',
        'height'        => 'integer',
        'permissions'   => 'array',
    ];
}
  • update操作表单元素
    • first_name
    • last_name
    • email
    • password
    • password_confirmation
    • photo
    • x (如果需要裁剪图片,则裁剪后的左上角位置x值)
    • y (如果需要裁剪图片,则裁剪后的左上角位置y值)
    • width (如果需要裁剪图片,则裁剪后的宽度值)
    • height (如果需要裁剪图片,则裁剪后的高度值)
    • permissions

UpdateRequest

public function rules()
{
    return [
        'first_name'    => 'required|max:255',
        'last_name'     => 'required|max:255',
        'slug'          => 'email|max:255|unique:users,slug,'.$this->segment(3),
        'password'      => 'confirmed|min:6|max:255',
        'photo'         => 'max:5120|image|mimes:jpeg,jpg,png',
        'x'             => 'integer',
        'y'             => 'integer',
        'width'         => 'integer',
        'height'        => 'integer',
        'permissions'   => 'array',
    ];
}
  • changePassword操作表单元素
    • password
    • password_confirmation

PasswordRequest

public function rules()
{
    return [
        'password'      => 'required|confirmed|min:6|max:255'
    ];
}
  • permission操作表单元素
    • permissions

PermissionRequest

public function rules()
{
    return [
        'permissions'      => 'array'
    ];
}
  • Api index筛选操作数据

    • action=filter
    • id
    • first_name
    • last_name
    • status (is_active列筛选;1或0)
    • created_at_from
    • created_at_to
  • Api store操作数据,与上述store操作相同。不包括图片数据

  • Api update操作数据,与上述update操作相同。不包括图片数据

  • Api group操作数据

    • action=activate|not_activate|destroy
    • id (以数组形式表示模型ID)
  • Api avatarPhoto操作数据

    • photo
    • x (如果需要裁剪图片,则裁剪后的左上角位置x值)
    • y (如果需要裁剪图片,则裁剪后的左上角位置y值)
    • width (如果需要裁剪图片,则裁剪后的宽度值)
    • height (如果需要裁剪图片,则裁剪后的高度值)

PhotoRequest

public function rules()
{
    return [
        'photo'     => 'required|max:5120|image|mimes:jpeg,jpg,png',
        'x'         => 'integer',
        'y'         => 'integer',
        'width'     => 'integer',
        'height'    => 'integer',
    ];
}

用户角色表单
  • store操作表单元素
    • name
    • slug
    • permissions

StoreRequest

public function rules()
{
   return [
        'name'          => 'required|max:255',
        'slug'          => 'alpha_dash|max:255|unique:roles',
        'permissions'   => 'array',
    ];
}
  • update操作表单元素
    • name
    • slug
    • permissions

UpdateRequest

public function rules()
{
    return [
        'name'          => 'max:255',
        'slug'          => 'alpha_dash|max:255|unique:roles,slug,'.$this->segment(3),
        'permissions'   => 'array',
    ];
}
  • Api index筛选操作数据

    • action=filter
    • id
    • name
    • slug
    • created_at_from
    • created_at_to
  • Api store操作数据,与上述store操作相同

  • Api update操作数据,与上述update操作相同

  • Api group操作数据

    • action=destroy
    • id (以数组形式表示模型ID)
  • Api models操作数据

    • 查询(以文本形式发送,并在 nameslug 字段中使用 like 方法进行筛选)

操作权限表单

创建用户和角色权限表非常简单。 Laravel User Module 使用 ErenMustafaOzdal\LaravelUserModule\Services\PermissionService 类来处理此操作。此类获取所有以 adminapi 开头的已定义路由,并以 Collection 类型返回。这样您可以使用 foreach 和复选框列出权限。要示例使用,首先在您要创建的 blade 文件中注入此类,然后进行列表显示。

@inject('permission', 'ErenMustafaOzdal\LaravelUserModule\Services\PermissionService')

<ul>
@foreach($permission->groupByController() as $namespace => $routes)

    <li>
        <span class="route-name">{!! $route['route'] !!}</span>
        {!! Form::checkbox( "permissions[{$route['route']}]", true, isset($permissions[$route['route']]) ) !!}
    </li>

@endforeach
</ul>
$permission->getCollection()

Illuminate\Routing\RouteCollection 类型的列表返回

$permission->getNames()

Illuminate\Support\Collection 类型的列表返回。此列表在 all 键中包含所有路由。在 adminapi 键中包含相应的路由列表。

$permission->getSpecificNames($prefix)

返回具有指定前缀的 Illuminate\Support\Collection 类型的路由名称列表。例如:api

$permission->getNameParts()

Illuminate\Support\Collection 类型的列表返回。与 $permission->getNames() 方法的唯一区别是它没有 all 键。

$permission->getAllNames()

Illuminate\Support\Collection 类型的列表返回。仅包含 all 键中的列表。

$permission->groupByController()

Illuminate\Support\Collection 类型的列表,根据 Controller 类型对所有路由进行分组。

$permission->permissionCount()

返回操作权限数,即路由名称数

$permission->permissionRate($count)

根据发送给方法的用户或用户角色权限数量,返回所具有权限的百分比。返回值类型为:integer

审核

Laravel User Module 包为每个表单请求设置了验证规则。对于此类表单请求验证规则,您不需要做任何事情。上述 Request 类的 rules 方法中已有说明。

事件

包内的几乎所有操作都会触发某个事件。您可以在自己的监听器文件中监听这些事件,并在事件触发时轻松执行所需操作。

登录、注销、注册事件

用户事件

用户角色事件

许可证

MIT