vi-kon/laravel-auth

此包已被废弃且不再维护。未建议替代包。

Laravel 5.2 的基于角色权限的认证器

v3.1.0 2016-04-27 21:47 UTC

README

这是一个用于基于角色权限认证的 Laravel 5 包。

目录

返回顶部

特性

  • 基于权限的访问
  • 权限分组(角色)
  • 通过单独的权限或角色限制路由访问
  • 允许使用相同的用户名,并分别属于不同的命名空间(每个命名空间都需要单独的登录界面或指定命名空间的登录选项)

返回顶部

待办事项

  • 修复传入的错误
  • 完成文档
  • 编写测试
  • 缓存元数据

返回顶部

安装

Composer

有多种方式可以通过 composer 安装此包

  • 将以下行添加到您的 composer.json 文件中

    // to your "require" object
    "vi-kon/laravel-auth": "^3.0"
  • 或者在项目根目录中运行以下命令

    composer require vi-kon/laravel-auth

    此命令将在您的 composer.json 文件中添加上述行并下载所需的包文件。

设置

在您的 Laravel 5.1 项目中,将以下行添加到 config/app.php

// to providers array
\ViKon\Auth\AuthServiceProvider::class,

返回顶部

别名

您可以可选地将别名添加回 app.php

// to aliases array
'RouterAuth' => \ViKon\Auth\Facades\RouterAuth::class,

返回顶部

中间件

不需要将简写键分配给 App\Http\KernelrouteMiddleware 属性,因为 AuthServiceProvider 会自动完成。这些中间件包括:

具有访问权限的中间件

具有访问权限的中间件可以附加到组或路由。此中间件检查路由是否分配了权限,以及当前用户是否有权访问该路由。

用法

部分 routes.php

// Single route
Route::get('/', [
    'middleware' => 'auth.has-access',
    'permission' => 'access.some.controller',
    'uses'       => 'SomeController@index',

]);
// Multiple routes in group
Route::group(['middleware' => 'auth.has-access'], function () {
    // ...
    Route::get('/', [
        'permission' => 'access.some.controller',
        'uses'       => 'SomeController@index',
    ]);
    // ...
});

登录重定向中间件

此中间件允许将用户(如果未认证)重定向到自定义登录页面。如果用户被分隔到不同的命名空间,并且某些路由属于第一个命名空间,而其他路由属于第二个命名空间,则非常有用。

权限中间件

权限中间件从其参数中获取权限,如果用户没有权限访问该路由,则限制用户。

返回顶部

模型

所有模型都具有可配置的数据库名称。这些数据库名称位于 table.* 配置值下。在此简短介绍中使用默认表名称。该包包含以下模型:

模型使用枢纽表来实现多对多关系:rel__role__grouprel__user__rolerel__user__group

注意:所有表名称,即使是枢纽表名称,都可以通过配置文件进行配置。

警告:如果数据库已经迁移,则不建议更改表名称,因为迁移下方法将尝试在错误的表上执行。

返回顶部

用户模型

代表模型,实现 AuthenticatableContractCanResetPasswordContract 接口,并使用 AuthenticatableCanResetPassword 特性。

命名空间: ViKon\Auth\Model

数据库表: users

读/写属性

类型 名称 描述 默认 数据库
integer id 唯一的用户标识符 - 主键,自增
string username 用户名 -
string password 用户密码 - 长度 255
string email 用户电子邮件地址 - 长度 255
string remember_token "记住我"的记住令牌 null 可空
string package 包名 "system" 长度 255
string home 用户主页路由名称 null 可空
boolean blocked 检查用户是否被阻止 false
boolean static 不允许在 GUI 上删除 false
boolean hidden 不允许在 GUI 上显示 false

usernamepackage 列有合同唯一索引。

读属性(关系)

类型 名称 描述 默认 数据库
\ViKon\Auth\Model\Role[] roles 角色集合 - user_roles 表的多对多关系
\ViKon\Auth\Model\Permission[] permissions 权限集合 - user_permissions 表的多对多关系
\ViKon\Auth\Model\Reminder[] reminders 提醒集合 - user_password_reminders 表的多对多关系

方法(关系)

Laravel 查询构建器的关联。

类型 名称 描述 数据库
BelongsToMany roles() 查询构建器的用户关系 user_roles 表的多对多关系
BelongsToMany permissions() 查询构建器的权限关系 user_permissions 表的多对多关系
BelongsToMany reminders() 查询构建器的提醒关系 user_password_reminders 表的多对多关系
HasOne profile() 返回附加的用户个人资料 user_profile 表的一对一关系(此表可以通过自定义个人资料模型进行自定义)

返回顶部

角色模型

角色用于管理用户权限作为集合。因此,这是一个将多个权限添加到用户的辅助工具。每个角色可以包含多个权限。

命名空间: ViKon\Auth\Model

数据库表: user_roles

读/写属性

类型 名称 描述 默认 数据库
integer id 唯一的角色标识符 - 主键,自增
string token 唯一的角色名称(令牌) null 唯一,可空
boolean static 不允许在 GUI 上删除 false
boolean hidden 不允许在 GUI 上显示 false

读属性(关系)

类型 名称 描述 默认 数据库
\ViKon\Auth\Model\User[] users 用户集合 - users 表的多对多关系
\ViKon\Auth\Model\Permission[] permissions 权限集合 - user_permissions 表的多对多关系

方法(关系)

Laravel 查询构建器的关联。

类型 名称 描述 数据库
BelongsToMany users() 查询构建器的用户关系 users 表的多对多关系
BelongsToMany permissions() 查询构建器的角色关系 user_permissions 表的多对多关系

返回顶部

权限模型

权限用于授予用户某些访问权限,如访问路径或特定操作。每个操作都应该有单独的权限。

例如,在REST控制器中,应该为单个操作具有{操作名称}.index{操作名称}.show{操作名称}.create{操作名称}.edit{操作名称}.destroy权限。

命名空间: ViKon\Auth\Model

数据库表: user_permissions

读写属性

类型 名称 描述 默认 数据库
integer id 唯一的权限标识符 - 主键,自增
string token 唯一的权限令牌 - 唯一

读取属性(关系)

类型 名称 描述 默认 数据库
\ViKon\Auth\Model\User[] users 用户集合 - users 表的多对多关系
\ViKon\Auth\Model\Role[] roles 角色集合 - user_roles 表的多对多关系

方法(关系)

Laravel 查询构建器的关联。

类型 名称 描述 数据库
BelongsToMany users() 查询构建器的用户关系 users 表的多对多关系
BelongsToMany roles() 查询构建器的角色关系 user_roles 表的多对多关系

返回顶部

UserPasswordReminder模型

存储带有存储时间的密码提醒令牌。

命名空间: ViKon\Auth\Model

数据库表: user_password_reminders

读写属性

类型 名称 描述 默认 数据库
integer id 唯一的提醒标识符 - 主键,自增
integer user_id 用户ID - 索引
string token 密码令牌 -
Carbon created_at 创建时间 -

读取属性(关系)

类型 名称 描述 默认 数据库
\ViKon\Auth\Model\User 用户 用户模型 - users表的多对一关系

方法(关系)

Laravel 查询构建器的关联。

类型 名称 描述 数据库
BelongsTo user() 查询构建器的用户关系 users 表的多对多关系

返回顶部

Profile模型

Profile模型在此包中未实现。这仅用于支持通过单个一对一关系向用户添加自定义数据。在配置中使用profile选项可以自定义Profile模型的位置。

Profile模型只有一个限制。需要有一个user_id列,该列指向用户模型id列。

Profile迁移文件的简短示例

class CreateProfileTable extends Migration
{
    public function up()
    {
        Schema::create('user_profile', function (Blueprint $table) {
            $table->engine = 'InnoDB';

            $table->increments('id');

            // Foreign connection to user table
            $table->unsignedInteger('user_id')
                  ->unique();
            $table->foreign('user_id')
                  ->references('id')
                  ->on('users')
                  ->onUpdate('cascade')
                  ->onDelete('cascade');
        });
    }

    public function down()
    {
        Schema::drop('user_profile');
    }
}

返回顶部

辅助类

Guard类

Guard类扩展了Laravel的默认Guard类,以授予新功能的访问权限。这些功能允许获取当前用户的权限,检查用户是否被阻止。

方法

一些方法不是新实现的,只是被覆盖了。

  • attempt - 使用凭据尝试认证用户(如果设置了默认角色包,则自动注入凭据)
  • hasPermission - 检查认证用户是否具有特定权限
  • hasPermissions - 检查认证用户是否同时具有多个权限
  • isBlocked - 检查认证用户是否被阻止
  • user - 获取认证用户

待办事项:方法描述

返回顶部

RouterAuth类

RouterAuth类允许从路由中获取认证信息。

方法

  • hasAccess - 获取命名路由的角色
  • isPublic - 检查当前用户是否有访问命名路由的权限
  • getPermissions - 检查路由是否为公开(路由没有权限)

待办事项:方法描述

返回顶部

中间件

中间件类允许通过附加的权限来过滤单个路由。

注意:这些中间件之间的区别仅在于语法。

返回顶部

PermissionMiddleware 中间件

注意:路由无法从该中间件获取参数。

HasAccessMiddleware 中间件

检查认证用户是否拥有访问当前路由的所有权限。要向路由添加权限,只需将具有正确权限的 permissions 键添加到路由选项中。

Router::get('/', [
    'permissions' => 'permission.name',
]);

或者如果传递了多个权限(认证用户必须拥有所有权限才能访问路由)

Router::get('/', [
    'permissions' => [
        'permission.first.name',
        'permission.second.name',
    ],
]);

注意:如果当前路由的 permissions 键为空或不存在,则路由将被标记为公开,不会进行路由限制。

配置

使用 php artisan vendor:publish --provider="ViKon\Auth\AuthServiceProvider" --tag="config" 命令可以将所有配置文件发布到 vi-kon/auth.php

在此文件中,有多种选项。以下选项可用

  • login.route - 登录屏幕路由名称
  • error-403.route - 如果用户已经认证但无权访问路由的路由名称

如果用户未认证且路由不为公开,则中间件将用户重定向到存储在 login.route 配置值中的命名路由。

如果用户已认证但未获得足够的权限访问路由,则中间件将用户重定向到存储在 error-403.route 配置值中的命名路由。

否则,中间件允许访问路由。

注意: login.routeerror-403.route 存储的是路由名称。

在 403 错误期间,以下参数将在重定向时闪存到会话中

  • route-request-uri - 带完整 URL
  • route-roles - 需要由路由列表的数组

用法

// check if user have "admin" role
$options = [
    'middleware'  => 'auth.role',
    'permissions' => 'admin',
];
Route::get('URL', $options);

// check if user have "admin" and "superadmin" roles
$options = [
    'middleware'  => 'auth.role',
    'permissions' => ['admin', 'superadmin'],
];
Route::get('URL', $options);

返回顶部

命名空间

命名空间对于将用户分组到单独的登录组非常有用。在每个命名空间中,用户名是唯一的,但在其他命名空间中,使用相同的用户名是允许的。

默认包是 system。所有用户都存储在这个包中。

认证

对于默认命名空间的用户认证很简单,只需像往常一样调用 attempt 方法即可

if (Auth::attempt(['email' => $email, 'password' => $password]))
{
    return redirect()->intended('dashboard');
}

对于自定义命名空间的认证,需要提供命名空间名称

if (Auth::attempt(['email' => $email, 'password' => $password, 'namespace' => $namespace]))
{
    return redirect()->intended('dashboard');
}

返回顶部

许可协议

此软件包受 MIT 许可协议许可

返回顶部