marshmallow/nova-user-groups

此包已被废弃,不再维护。没有建议的替代包。

用于管理 Nova 用户组的包

v2.1.0 2023-01-17 08:21 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

用于管理 Nova 用户组的包

安装

您可以通过 composer 安装此包

composer require marshmallow/nova-user-groups

您可以使用以下命令发布并运行迁移

php artisan vendor:publish --provider="Marshmallow\NovaUserGroups\NovaUserGroupsServiceProvider" --tag="nova-user-groups-migrations"
php artisan migrate

使用方法

运行安装命令以开始使用此包。运行安装时,这将创建 Nova 资源,以便您管理 Nova 安装中的所有数据。它还将创建一个管理员用户组,并将所有当前 Nova 资源连接到该组。它还将连接所有现有用户到该管理员组。

php artisan user-groups:install

php artisan user-groups:policies

要添加超级管理员组,请使用 -s 选项

php artisan user-groups:install -s

用户模型

HasUserGroup 特性添加到您的用户模型中。

namespace App\Models;

use Marshmallow\NovaUserGroups\Traits\HasUserGroup;

class User extends Authenticatable
{
    use HasUserGroup;

    // ...
}

Nova 资源

UserGroupResource 特性添加到您的主要 Nova 资源中。

namespace App\Nova;

use Laravel\Nova\Resource as NovaResource;
use Laravel\Nova\Http\Requests\NovaRequest;
use Marshmallow\NovaUserGroups\Traits\UserGroupResource;

abstract class Resource extends NovaResource
{
    use UserGroupResource;

    // ...
}

用户方法

您可以向用户模型添加方法并管理是否允许在 Nova 中运行这些方法。默认情况下,我们将向用户模型添加三个方法。这些是 viewNova()viewTelescope()viewHorizon()。如果您想添加新方法,需要遵循以下步骤。

在您的配置中添加您要添加的方法。

// config/nova-user-groups.php
return [
    'user_methods' => [
        // ...
        'impersonate' => 'Is allowed to impersonate users',
    ],
];

接下来,您需要将方法添加到您的用户模型中。并调用 allowedToRunMethod 方法。

// app/models/user.php

namespace App\Models;

class User extends Authenticatable
{
    /**
     * Please not that the methods must start with `may` and
     * then start with a capital letter.
     */
    public function mayImpersonate()
    {
        return $this->allowedToRunMethod('impersonate');
    }
}

一旦设置完毕,前往 Nova 并编辑您的用户组。在方法部分,您现在将看到新的 impersonate 方法。选中此方法以激活该用户组的方法。

Nova 服务提供者

UserGroupNovaServiceProvider 特性添加到您的 NovaServiceProvider。完成此操作后,您将有一些新方法来确保认证用户组可以执行在 Nova 服务提供者中定义的操作。

namespace App\Providers;

// ..
use Marshmallow\NovaUserGroups\Traits\UserGroupNovaServiceProvider;

class NovaServiceProvider extends NovaApplicationServiceProvider
{
    use UserGroupNovaServiceProvider;

    // ...

    protected function cards()
    {
        return $this->canSeeCards([
            // Your cards go here.
        ]);
    }

    protected function dashboards()
    {
        return $this->canSeeDashboards([
            // Your cards go here.
        ]);
    }

    protected function tools()
    {
        return $this->canSeeTools([
            // Your cards go here.
        ]);
    }
}

更改模型和资源

您可以通过在 AppServiceProvider 中的 boot 方法中更改它们来覆盖所有模型和资源。下面是一个示例。此示例中的值是默认值。

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    NovaUserGroups::$userModel = User::class;
    NovaUserGroups::$userGroupModel = \Marshmallow\NovaUserGroups\Models\UserGroup::class;
    NovaUserGroups::$novaResourceModel = \Marshmallow\NovaUserGroups\Models\NovaResource::class;
    NovaUserGroups::$novaResourceActionModel = \Marshmallow\NovaUserGroups\Models\NovaResourceAction::class;

    NovaUserGroups::$userResource = \App\Nova\User::class;
    NovaUserGroups::$novaResource = \Marshmallow\NovaUserGroups\Nova\NovaResource::class;
    NovaUserGroups::$novaResourceAction = \Marshmallow\NovaUserGroups\Nova\NovaResourceAction::class;
}

配置

某些方法需要额外的策略访问权限,请在 'groups' 下添加一个具有键和名称的组。在 'methods' 下添加具有组键和方法名称的允许方法。

return [

    /*
    |--------------------------------------------------------------------------
    | Allowed Admin Groups
    |--------------------------------------------------------------------------
    |
    | This is a list of groups on which the methods will be defined.
    |
    */
    'groups' => [
        'admin' => 'Administrator',
        'super-admin' => 'SuperAdministrator',
    ],

    /*
    |--------------------------------------------------------------------------
    | Allowed Methods
    |--------------------------------------------------------------------------
    |
    | This is a list of allowed methods per group
    |
    */
    'methods' => [
        'admin' => [
            'viewNova',
        ],
        'super-admin' => [
            'viewNova',
            'viewTelescope',
            'viewHorizon'
        ]
    ],
];

## Commands

```bash
php artisan user-groups:policies
php artisan user-groups:policy {name}
php artisan user-groups:import-resources

php artisan marshmallow:resource NovaTool NovaUserGroups --force
php artisan marshmallow:resource UserGroup NovaUserGroups --force
php artisan marshmallow:resource NovaResource NovaUserGroups --force
php artisan marshmallow:resource NovaResourceAction NovaUserGroups --force

测试

composer test

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全漏洞

请查阅我们的安全策略了解如何报告安全漏洞。

鸣谢

许可证

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