netcore / module-user

该包最新版本(v2.0.2)没有可用的许可证信息。

v2.0.2 2018-04-24 09:25 UTC

README

该包的主要思想是在CMS侧简化用户管理。同时,还提供简单的社会化登录集成,以及额外的特性和助手。

安装前

该包是Netcore CMS生态系统的一部分,仅在安装以下包的项目中有效

https://github.com/netcore/netcore

https://github.com/netcore/module-admin

https://github.com/netcore/module-setting

https://github.com/nWidart/laravel-modules

安装

composer require netcore/module-user

发布配置、资源、迁移。迁移和种子

php artisan module:publish-config User
php artisan module:publish User
php artisan module:publish-migration User
php artisan migrate
php artisan module:seed User

您需要将 UserPermissions 特性添加到您的用户模型中,以便能够登录acp。

您应该可以正常使用了。

特性

  • 您将在acp中获得用户管理部分,其中您可以创建、删除、编辑、显示用户。您还可以配置用户部分允许执行的操作。例如,您可以在acp中禁用删除用户。为此,您需要导航到 config/netcore/module-user.php 配置文件,并将相应变量从true更改为false
...
'allow' => [
        'delete' => false,
        'create' => true,
        'view'   => false,
        'export' => false,
    ]
...
  • 此外,如果您想使用社会化登录,可以在 config/netcore/module-user.php 中配置提供者,也可以开启和关闭社会化登录支持。如果您使用社会化登录,则需要将 UserSocialite 特性添加到您的User模型中,并将 ControllerSocialite 添加到您的AuthController中。

它将种子OAuth设置,您可以在页面的设置部分中进行配置。

别忘了将 Socialite 包添加到您的composer.json文件中

要调用社会化登录请求,您可以使用此URL /login/{provider},其中{provider}将被facebook或google替换,取决于您选择了哪个。

您需要向您的AuthController中添加 providerCallback 方法,在该方法中,您将能够管理从提供者收到的数据。

public function providerCallback(string $provider)
{
    $this->providerGate($provider);
    try {
        $providerUser = Socialite::driver($provider)->user(); // Provider data
    } catch (Exception $exception) {
      return $this->handleBadProviderResponse($exception, $provider);
    }
}
        

导出用户

  • 首先,您需要配置导出过滤器,向相关模型添加导出数据格式化器(如果需要关联选项)
  • 在module-user.php配置文件中
    'export_options' => [
        // Users only
        [
            'title'   => 'Users only',
            // Filters that can be appied to exportable data
            'filters' => [
                [
                    'name'     => 'Register date from:', // Filter name
                    'key'      => 'created_at_from', // Filter key (for html input - must be unique) 
                    'type'     => 'date', // Field type
                    'field'    => 'created_at', // Column name in database
                    'operator' => '>=', // SQL select operator
                    'required' => false, // Is required?
                ],
                [
                    'name'     => 'Register date to:',
                    'key'      => 'created_at_to',
                    'type'     => 'date',
                    'field'    => 'created_at',
                    'operator' => '<=',
                    'required' => false,
                ],
                [
                    'name'           => 'Pick:',
                    'key'            => 'is_active',
                    'type'           => 'select',
                    'field'          => 'is_active',
                    'operator'       => '=',
                    'required'       => false,
                    'select_options' => [
                        null => 'Both',
                        0    => 'Inactive users',
                        1    => 'Active users',
                    ],
                ],
            ],
        ],
        // User with some relation/-s
        [
            'title'        => 'User with classifieds',
            'find_by'      => 'id:fullName', // format - column:userRepresentableData
            'withRelation' => [
                'name'    => 'classifieds', // relation name
                // Relation filters
                'filters' => [
                    [
                        'name'           => 'Of type:',
                        'key'            => 'of_type',
                        'type'           => 'select',
                        'field'          => 'type',
                        'operator'       => '=',
                        'required'       => false,
                        'select_options' => [
                            null   => 'All',
                            'buy'  => 'Buy',
                            'sell' => 'Sell',
                            'rent' => 'Rent',
                        ],
                    ],
                    [
                        'name'           => 'From date:',
                        'key'            => 'created_at_from',
                        'type'           => 'date',
                        'field'          => 'created_at',
                        'operator'       => '>=',
                        'required'       => false,
                    ],
                    [
                        'name'           => 'To date:',
                        'key'            => 'created_at_to',
                        'type'           => 'date',
                        'field'          => 'created_at',
                        'operator'       => '<=',
                        'required'       => false,
                    ],
                ],
            ],
        ],
    ],

然后,您需要在您的相关模型中实现以下方法

    /**
     * Export config
     *
     * @return array
     */
    public function getExportableFieldsMap(): array
    {
        return [
            // Column name => Value
            'City' => $this->city->name ?? null,
            'Language' => $this->language_iso_code,
            'Type' => $this->type,
            'Name' => $this->name,
            'Price' => $this->price,
            ...
        ];
    }

数据表配置

  • 默认情况下,CRUD模块将扫描的列将显示。

  • 您可以配置必要的列,修改标题以及修改值。

  • 在某个地方创建展示器,例如在app/Presenters/AdminUsersDatatablePresenter.php中

  • 示例文件

    <?php
    
    namespace App\Presenters;
    
    class AdminUsersDatatablePresenter
    {
        /**
         * Columns to show.
         *
         * @var array
         */
        public $showColumns = [
            'created_at'        => 'Registerted at',
            'is_active'         => 'Is active?',
            'name'              => 'Name',
            'email'             => 'E-mail address',
            'phone'             => 'Phone',
            'language_iso_code' => [
                'title' => 'Country', // column title
                'name'  => 'language.title', // for query
                'data'  => 'language.title', // for display data
            ],
        ];
    
        /** ---------- Modifiers ---------- */
    
        /**
         * is_active column modifier.
         *
         * @param $user
         * @return string
         */
        public function isActive($user): string
        {
            return $user->is_active ? 'Yes' : 'No';
        }
        
        /**
         * created_at column modifier.
         * 
         * @param $user
         * @return string
         */
        public function createdAt($user): string 
        {
            return $user->created_at->format('d.m.Y');
        }
    }