rappasoft/vault

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

Vault, Laravel 5 角色与权限

v0.1-alpha 2015-02-03 15:05 UTC

This package is auto-updated.

Last update: 2020-03-21 15:55:27 UTC


README

##此包不再维护。请使用完整模板代替。

Vault (Laravel 5 包)

Project Status Build Status Scrutinizer Code Quality Total Downloads License

Vault 是一个简单而强大的 Laravel 5 框架访问控制系统。它包含一个后端用户界面来管理用户、角色和权限,以及它们之间的关系。

请注意,虽然此包完全可用,但仍在开发中,代码库经常变化。当包稳定发布时,将创建 1.0 标签。

示例: Vault 用户索引 Vault 创建角色 Vault 编辑用户 Vault 角色索引

文档

先决条件

  • 此包假设您已经安装了使用预打包认证库和功能的 Laravel 5。对于全新项目,我建议使用我的Laravel 5 模板包并要求此库。
  • 用户模型必须启用软删除。
## 设置

composer.json 文件的 require 键中添加以下内容

"rappasoft/vault": "dev-master"

运行 Composer 更新命令

$ composer update

在您的 config/app.php 中,将以下内容添加到您的 $providers$aliases 数组中

'providers' => [

    App\Providers\EventServiceProvider::class,
    App\Providers\RouteServiceProvider::class,
    ...
    Rappasoft\Vault\VaultServiceProvider::class,
    Illuminate\Html\HtmlServiceProvider::class,

],
'aliases' => [

    'App'       => Illuminate\Support\Facades\App::class,
    ...
    'Form'		=> Illuminate\Html\FormFacade::class,
    'HTML'		=> Illuminate\Html\HtmlFacade::class

],

默认情况下,服务提供程序将加载 Vault Facade。

运行 `vendor:publish` 命令
$ php artisan vendor:publish --provider="Rappasoft\Vault\VaultServiceProvider"

这将发布以下文件到您的应用程序

app/config/vault.php 配置文件 Vault 迁移文件 Vault 种子文件(将在您的 DatabaseSeeder.php 类末尾添加种子调用) public/js/vault/* public/css/vault/*

如果需要,您也可以按标签发布单个资产

$ php artisan vendor:publish --provider="Rappasoft\Vault\VaultServiceProvider" --tag="config"
$ php artisan vendor:publish --provider="Rappasoft\Vault\VaultServiceProvider" --tag="migration"
$ php artisan vendor:publish --provider="Rappasoft\Vault\VaultServiceProvider" --tag="seeder"
$ php artisan vendor:publish --provider="Rappasoft\Vault\VaultServiceProvider" --tag="assets"

您还可以发布视图,请参阅下面的配置。

运行 dumpautoload 命令

$ composer dumpautoload -o

运行 migration 命令

$ php artisan migrate
将 `UserHasRole` 特性添加到您的 User 模型中:
<?php namespace App;

...
use Illuminate\Database\Eloquent\SoftDeletes;
use Rappasoft\Vault\Traits\UserHasRole;

class User extends Model implements AuthenticatableContract, CanResetPasswordContract {

	use Authenticatable, CanResetPassword, SoftDeletes, UserHasRole;
}
运行 `seed` 命令
$ php artisan db:seed --class="VaultTableSeeder"
将 `route middleware` 添加到您的 app/Http/Kernel.php 文件中:
protected $routeMiddleware = [
    'auth' => App\Http\Middleware\Authenticate::class,
    'auth.basic' => Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'guest' => App\Http\Middleware\RedirectIfAuthenticated::class,
    ...
    'vault.routeNeedsRole' => \Rappasoft\Vault\Http\Middleware\RouteNeedsRole::class,
    'vault.routeNeedsPermission' => \Rappasoft\Vault\Http\Middleware\RouteNeedsPermission::class,
    'vault.routeNeedsRoleOrPermission' => \Rappasoft\Vault\Http\Middleware\RouteNeedsRoleOrPermission::class,
];

### 完成!现在您应该能够导航到 http://localhost/access/users 来查看用户索引。

## 配置 ### 配置文件
/*
* The company name used in the footer of the vault views.
*/
vault.general.company_name
/*
* Whether or not to load the vault views when the application loads.
* Useful if you want to copy the vault routes into your own routes file to modify.
*/
vault.general.use_vault_routes

/*
* The namespaced route to the vault role
*/
vault.role
/*
* The namespaced route to the vault permission
*/
vault.permission

/*
* Used by Vault to save roles to the database.
*/
vault.roles_table
/*
* Used by Vault to save permissions to the database.
*/
vault.permissions_table
/*
* Used by Vault to save relationship between permissions and roles to the database.
*/
vault.permission_role_table
/*
 * Used by Vault to save relationship between permissions and users to the database.
 * This table is only for permissions that belong directly to a specific user and not a role
 */
vault.permission_user_table
/*
* Used by Vault to save assigned roles to the database.
*/
vault.assigned_roles_table

/*
* Amount of users to show per page for pagination on users.index
*/
vault.users.default_per_page
/*
* The rules to validate the users password by when creating a new user
*/
vault.users.password_validation

/*
* Whether a role must contain a permission or can be used standalone (perhaps as a label)
*/
vault.roles.role_must_contain_permission
/*
 * Whether or not the administrator role must possess every permission
 * Works in unison with permissions.permission_must_contain_role
 */
vault.roles.administrator_forced

/*
 * Whether a permission must contain a role or can be used standalone
 * Works in unison with roles.administrator_forced
 * If a permission doesn't contain a role it can be assigned directly to a user
 */
vault.permissions.permission_must_contain_role

/*
 * Validation overwrites, at time of validation uses these rules
 * Each must return an array even if a single rule
*/
vault.validation.users.create
vault.validation.users.update
### Vault 视图

默认情况下,该包在没有发布其视图的情况下工作。但如果你想要将 vault 视图发布到应用程序以完全控制,请运行 vault:views 命令

$ php artisan vault:views
### Vault 路由

如果你不想让 vault 使用其默认的路由文件,你可以复制它并将配置 vault.general.use_vault_routes 设置为 false,它将默认不加载。

### 利用 `status` 属性

如果你想要启用/禁用用户,你只需在登录用户的地方进行一个检查即可

if ($user->status == 0)
    return Redirect::back()->withMessage("Your account is currently disabled");
## 应用路由中间件

Laravel 5 正在尝试远离 filters.php 文件,更多地使用中间件。以下是从 vault 路由文件中的示例,展示了一组需要管理员角色的路由

Route::group([
	'middleware' => 'vault.routeNeedsRole',
	'role' => ['Administrator'],
	'redirect' => '/',
	'with' => ['error', 'You do not have access to do that.']
], function()
{
    Route::group(['prefix' => 'access'], function ()
    	{
    		/*User Management*/
    		Route::resource('users', '\Rappasoft\Vault\Http\Controllers\UserController', ['except' => ['show']]);
    	});
});

上述代码检查当前认证的用户是否有 Administrator 角色,如果没有,则重定向到 /,并带有键为 message、值为 You do not have access to do that. 的会话变量

以下中间件包含在 vault 包中

vault.routeNeedsRole vault.routeNeedsPermission vault.routeNeedsRoleOrPermission ### 路由参数 middleware => 中间件名称,你可以在 app/Http/Kernel.php 文件中更改它们。 role => 一个角色的字符串或由名称组成的角色数组。 permission => 一个权限的字符串或由名称组成的权限数组。 needsAll => 一个布尔值,默认为 false,表示是否需要所有指定的角色/权限进行认证。 with => 在失败时发送会话闪存。数组包含 2 项,第一项是会话键,第二项是值。 redirect => 认证失败时重定向到 URL。 redirectRoute => 认证失败时重定向到路由。 redirectAction => 认证失败时重定向到动作。

如果没有指定重定向,将抛出 response('Unauthorized', 401);

## 创建您自己的中间件

如果你想要创建自己的中间件,以下方法可用。

/**
	 * Checks if the user has a Role by its name.
	 * @param string $name
	 * @return bool
*/
Vault::hasRole($role);

/**
	 * Checks to see if the user has an array of roles, and whether or not all must return true to authenticate
	 * @param array $roles
	 * @param boolean $needsAll
	 * @return bool
*/
Vault::hasRoles($roles, $needsAll);

/**
	 * Check if user has a permission by its name.
	 * @param string $permission.
	 * @return bool
*/
Vault::can($permission);

/**
	 * Check an array of permissions and whether or not all are required to continue
	 * @param array $permissions
	 * @param boolean $needsAll
	 * @return bool
*/
Vault::canMultiple($permissions, $needsAll);

Vault:: 默认使用当前认证的用户。您还可以这样做

$user->hasRole($role);
$user->hasRoles($roles, $needsAll);
$user->can($permission);
$user->canMultiple($permissions, $needsAll);
### VaultRoute 特性

如果您想利用 Vault 路由处理程序使用的方法,可以使用 use

use Rappasoft\Vault\Traits\VaultRoute

这将为您的中介服务提供抓取路由资源的方法。您可以在中介服务中添加方法来抓取 Vault 默认不抓取的资源并利用它们。

## Blade 扩展

Vault 随带 @blade 扩展,帮助您通过角色或权限显示和隐藏数据,而无需在代码中使用不想要的 if 语句来混淆代码

@role('User')
    This content will only show if the authenticated user has the `User` role.
@endrole

@permission('can_view_this_content')
    This content will only show if the authenticated user is somehow associated with the `can_view_this_content` permission.
@endpermission

目前每个调用仅支持一个角色或权限,但它们可以嵌套。

如果您想在布局文件中显示或隐藏特定部分,可以像这样操作

@role('User')
    @section('special_content')
@endrole

@permission('can_view_this_content')
    @section('special_content')
@endpermission
## 许可证

Vault 是在 MIT 许可证下免费分发的软件。

## 其他信息

任何问题,请 在此处报告