beatswitch / lock-laravel

Lock 的 Laravel 驱动

0.5.2 2017-10-17 07:35 UTC

This package is auto-updated.

Last update: 2024-08-29 03:49:25 UTC


README

Build Status Code Climate Test Coverage Software License Packagist Version Total Downloads

遗憾的是,Lock 目前未维护。在目前这段时间内,我无法提供支持或接受新的贡献。其他优先事项使我无法将应有的工作投入到 Lock 中。最终我将尝试再次开始工作,但遗憾的是,我无法确定具体时间。我要感谢所有的贡献者和用户。

-- Dries

本包是 Laravel 5 的 Lock 驱动。查看 Lock 的文档以获取更多信息。它需要至少 PHP 5.6。

目录

安装

通过 Composer 安装此包。

$ composer require beatswitch/lock-laravel

在您的 app.php 配置文件中注册服务提供者。

BeatSwitch\Lock\Integrations\Laravel\LockServiceProvider::class,

在您的 app.php 配置文件中注册外观。

'Lock' => BeatSwitch\Lock\Integrations\Laravel\Facades\Lock::class,
'LockManager' => BeatSwitch\Lock\Integrations\Laravel\Facades\LockManager::class,

发布配置文件。发布后,您可以在 config/lock.php 中编辑配置选项。

$ php artisan vendor:publish --provider="BeatSwitch\Lock\Integrations\Laravel\LockServiceProvider" --tag="config"

如果您使用的是数据库驱动,您应该运行包的迁移。这将创建存储所有权限的数据库表。

$ php artisan vendor:publish --provider="BeatSwitch\Lock\Integrations\Laravel\LockServiceProvider" --tag="migrations"
$ php artisan migrate

请阅读主要 Lock 文档,以在您的 User 模型上设置调用者合约,并获取关于 Lock 如何工作的更深入文档。

同时,请确保在配置文件中的 permissions 回调上设置 BeatSwitch\Lock\LockAware 特性。这样,您的认证用户将接收到一个 Lock 实例(如果没有用户认证,则为 guest 用户),您可以直接从用户对象中调用权限。如果没有认证用户,将初始化一个 SimpleCaller 对象,它具有 guest 角色。这样,您仍然可以使用 Lock 外观。如果您希望 LockAware 特性在 User 模型上工作,您需要通过中间件激活它。在 StartSession 中间件之后注册以下中间件。

\BeatSwitch\Lock\Integrations\Laravel\Middleware\InitLockAwareTrait::class,

使用方法

设置角色和别名

您可以通过配置文件中的 permissions 回调提前注册角色和别名。在这里,您可以指定哪些操作应分组在别名下,或设置哪些角色应从彼此继承权限。

<?php

use BeatSwitch\Lock\Manager;

return [

    ...

    'permissions' => function (Manager $manager) {
        // Set your configuration here.
        $manager->alias('manage', ['create', 'read', 'update', 'delete']);
        $manager->setRole('user', 'guest');
        $manager->setRole(['editor', 'admin'], 'user');
    },
];

使用数组驱动设置权限

如果您使用的是数组驱动,您可以在上面的 permissions 回调中提前设置所有权限。

<?php

use BeatSwitch\Lock\Callers\SimpleCaller;
use BeatSwitch\Lock\Drivers\ArrayDriver;
use BeatSwitch\Lock\Manager;

return [

    ...

    'permissions' => function (Manager $manager) {
        // Only set permissions beforehand when using the array driver.
        if ($manager->getDriver() instanceof ArrayDriver) {
            // Set some role permissions.
            $manager->role('guest')->allow('read', 'posts');
            $manager->role('user')->allow('create', 'posts');
            $manager->role('editor')->allow('publish', 'posts');

            // Set permissions for a specific user.
            $manager->caller(new SimpleCaller('users', 1))->allow('publish', 'posts');
        }
    },
];

使用数据库驱动

通过在配置文件中切换驱动类型来启用数据库驱动。数据库驱动将使用您的默认数据库连接将权限存储到数据库中。您可以通过更改配置文件中的设置来选择将权限存储到哪个表中。

现在您已设置好数据库驱动,您可以准备创建您的权限的用户界面,并在您的应用程序中使用锁管理器实例来更改调用者或角色的权限。

使用外观

本包包含两个外观:Lock 外观,它持有当前认证用户的 BeatSwitch\Lock\Lock 实例(如果没有认证用户,则为 guest 用户)和 LockManager 类,它可以用于为调用者或角色启动新的锁实例。

检查当前用户的权限很容易。

Lock::can('create', 'posts');
Lock::cannot('publish', $post);

// Or use the auth instance. This is possible because your User model has the LockAware trait.
Auth::user()->can('create', 'posts');

使用管理器来设置权限。

LockManager::caller($user)->allow('create', 'posts');
LockManager::caller($user)->allow('all');
LockManager::role('editor')->allow('create', 'posts');

使用依赖注入

您可以使用Laravel的IoC容器将当前用户锁实例或锁管理器实例插入到您的类或控制器中。

<?php

use BeatSwitch\Lock\Manager;

class UserManagementController extends BaseController
{
    protected $lockManager;

    public function __construct(Manager $lockManager)
    {
        $this->lockManager = $lockManager;
    }

    public function togglePermission()
    {
        $userId = Input::get('user');
        $action = Input::get('action');
        $resource = Input::get('resource');

        $user = User::find($userId);

        $this->lockManager->caller($user)->toggle($action, $resource);

        return Redirect::route('user_management');
    }
}

维护者

锁目前处于维护状态。

此包目前由Dries Vints维护。
如果您有任何问题,请随时在问题报告中提出

贡献

有关详细信息,请参阅贡献文件

变更日志

您可以在变更日志文件中查看每个版本的更改列表。

许可

MIT许可证。请参阅许可证文件获取更多信息。