定制 zakharov-andrew/yii2-user 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

zakharov-andrew/yii2-user

最新稳定版本:v0.7.5

Composer 安装命令:

composer require zakharov-andrew/yii2-user

包简介

Yii2 User

README 文档

README

Yii2 user module by Zakharov Andrey

Latest Stable Version Total Downloads License Yii2

Yii2 user authentication module for management users and their rights.

  • Registration, authorization, password recovery, change email and so on
  • User administration interface
  • Supports role creation
  • Multiple user roles are supported
  • Happy Birthday widgets
  • Birthday Calendar widget
  • User Deputies Management
  • logging of failed authorization attempts and blocking access via IP
  • Supports languages: English, Russian

🚀 Installation

The preferred way to install this extension is through composer.

Either run

$ composer require zakharov-andrew/yii2-user

or add

"zakharov-andrew/yii2-user": "*"

to the require section of your composer.json file.

Subsequently, run

./yii migrate/up --migrationPath=@vendor/zakharov-andrew/yii2-user/migrations

in order to create the settings table in your database.

Or add to console config

return [
    // ...
    'controllerMap' => [
        // ...
        'migrate' => [
            'class' => 'yii\console\controllers\MigrateController',
            'migrationPath' => [
                '@console/migrations', // Default migration folder
                '@vendor/zakharov-andrew/yii2-user/src/migrations'
            ]
        ]
        // ...
    ]
    // ...
];

🛠 Usage

Add this to your main configuration's modules array

    'modules' => [
        'user' => [
            'class' => 'ZakharovAndrew\user\Module',
            'bootstrapVersion' => 5, // if use bootstrap 5
            'showTitle' => true, // display H1 headings (default - true)
            'enableUserSignup' => false, //Toggles user registration functionality (default - false)
            'telegramToken' => '', // necessary for the bot to work
            'telegramBotLink' => 'https://t.me/YOUR_BOT_NAME_FOR_USER_LINK', //change!
            // use for menu and access
            'controllersAccessList' => [
                1001 => [
                            'Users' => [
                                '/user/user/index' => 'users',
                                '/user/user/create' => 'create user',
                            ],
                        ], 
                1002 => ['/user/roles/index' => 'Roles']
            ],
            'wallpapers' => [
                [
                    'url' => 'path/to/wallpaper1.jpg',
                    'roles' => ['user', 'admin'], // available to which roles
                ],
                [
                    'url' => 'path/to/wallpaper2.jpg',
                    'roles' => ['admin'], // only for admin
                ],
            // ...
            ],
        ],
        // ...
    ],

Add this to your config\params.php

return [
    // ...
    'supportEmail' => 'change-this-email@test.com',
    // lifetime of the password reset token
    'userResetPasswordTokenExpire' => 3600
    // ...
];

If a pretty URL is enabled:

Add this to your main configuration's urlManager array

'urlManager' => [
    //...
    'rules' => [
        'login' => 'user/user/login',
        'logout' => 'user/user/logout',
        'profile' => 'user/user/profile',
        'signup' => 'user/user/signup',
        'wallpapers' => 'user/wallpaper/index',
        //...
    ],
    //...
],

📊 Controller Action Logging

The module provides comprehensive controller action logging for auditing and debugging purposes. When enabled, it automatically logs all controller actions with detailed information.

Features:

  • ✅ User tracking - Logs user ID for authenticated users
  • ✅ Action details - Records controller, action, and HTTP method
  • ✅ Request data - Captures request parameters (sensitive data filtered)
  • ✅ Performance metrics - Measures execution time
  • ✅ Security information - Logs IP address and user agent
  • ✅ Response codes - Records HTTP response status codes

Configuration

Enable logging in module configuration:

'modules' => [
    'user' => [
        'class' => 'ZakharovAndrew\user\Module',
        'enableControllerLogging' => true, // Enable logging
        // ... other configurations
    ],
],

What Gets Logged

FieldDescription
user_idUser ID (if authenticated)
controllerController name
actionAction name
methodHTTP method (GET, POST, etc.)
urlRequest URL
request_paramsRequest parameters (passwords/tokens filtered)
response_codeHTTP response status code
execution_timeAction execution time in seconds
ip_addressClient IP address
user_agentClient browser/user agent

Sensitive Data Protection

The logging system automatically filters sensitive information:

  • Passwords (password, password_hash, etc.)
  • Authentication tokens (auth_key, access_token, etc.)
  • Security codes (cvv, security_code, etc.)
  • Sensitive fields are replaced with HIDDEN in the logs.

🎉 Happy Birthday widget

You can use the birthday greeting widget by customizing both the header and the message indicating that there are no birthdays today:

<?= \ZakharovAndrew\user\components\BirthdayWidget::widget([
    'headerMessage' => 'Today’s birthdays:',
    'noBirthdaysMessage' => 'Today, no one is celebrating a birthday.', // or empty
    'useAvatars' => true
]); ?>

Widget for congratulating the user on his birthday:

<?= \ZakharovAndrew\user\components\BirthdayGreetingWidget::widget([
    'message' => '<h1>Happy Birthday, {username}!</h1>'
]) ?>

📅 Birthday Calendar Widget

Display a calendar of birthdays for the current week and next month:

<?= \ZakharovAndrew\user\widgets\BirthdayCalendarWidget::widget([
    'title' => 'Upcoming Birthdays',
    'showAge' => true,
    'maxUsersPerDay' => 3
]); ?>

Options:

  • title (string) - Calendar title
  • showAge (bool) - Show user age (default: true)
  • maxUsersPerDay (int) - Maximum number of users to show per day (default: 5)

Features:

  • Shows birthdays from current week to next month
  • 📆 Weekly grouping with week numbers
  • 🎯 Current day highlighting
  • 👥 Clickable user names linking to profiles
  • 🔢 Age display with proper pluralization
  • 📱 Responsive design for mobile devices
  • 🌍 Multiple language support (English/Russian)

Advanced usage with custom parameters:

<?= \ZakharovAndrew\user\widgets\BirthdayCalendarWidget::widget([
    'title' => \ZakharovAndrew\user\Module::t('Upcoming Birthdays'),
    'showAge' => true,
    'maxUsersPerDay' => 5,
    'view' => 'custom-calendar-view' // custom view file
]); ?>

👤 User Menu Widget

Add a user menu to your navigation bar with avatar, name and dropdown options:

Basic Usage

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
    <div class="container-fluid">
        <a class="navbar-brand" href="#">Your App</a>
        
        <div class="collapse navbar-collapse">
            <ul class="navbar-nav me-auto">
                <!-- Your menu items -->
            </ul>
            
            <ul class="navbar-nav">
                <?= \ZakharovAndrew\user\widgets\UserMenuWidget::widget() ?>
            </ul>
        </div>
    </div>
</nav>

Custom Guest Content

Customize the display for non-authenticated users:

<?= \ZakharovAndrew\user\widgets\UserMenuWidget::widget([
    'guestContent' => '
        <div class="d-flex gap-2">
            <a href="' . \yii\helpers\Url::to(['/user/auth/login']) . '" class="btn btn-outline-light btn-sm">
                ' . \ZakharovAndrew\user\Module::t('Login') . '
            </a>
            <a href="' . \yii\helpers\Url::to(['/user/auth/signup']) . '" class="btn btn-primary btn-sm">
                ' . \ZakharovAndrew\user\Module::t('Signup') . '
            </a>
        </div>
    ',
]) ?>

Advanced Configuration

<?= \ZakharovAndrew\user\widgets\UserMenuWidget::widget([
    'guestView' => 'custom-guest-view', // custom view file
    'guestContent' => [
        'loginUrl' => ['/user/auth/login'],
        'signupUrl' => ['/user/auth/signup'],
    ],
]) ?>

👥 User Deputies Management

The module now supports user deputies functionality, allowing users to have multiple deputies with date tracking and assignment history.

Basic Usage

// Get current user
$user = User::findOne(1);

// Add a deputy with validity period
$user->addDeputy(2, '2024-01-01', '2024-12-31');

// Get all active deputies for a user
$deputies = $user->getCurrentDeputies();

// Check if user has specific deputy
$hasDeputy = $user->hasDeputy(2);

// Check if user is deputy for another user
$isDeputy = $user->isDeputyFor(1);

// Remove deputy
$user->removeDeputy(2);

// Get users for whom current user is a deputy
$deputyForUsers = $user->getCurrentDeputyForUsers();

Advanced Usage

// Add deputy with custom created by user
$user->addDeputy(2, '2024-01-01', null, Yii::$app->user->id);

// Get deputies list for dropdown
$deputiesList = $user->getDeputiesList();

// Get available users for deputy assignment
$availableUsers = User::getAvailableUsersForDeputy($currentUserId);

// Check if deputy relation is currently active
$deputy = UserDeputy::findOne(1);
$isActive = $deputy->isCurrentlyActive();

Features

  • ✅ Multiple deputies - Users can have multiple deputies
  • ✅ Date tracking - Track assignment dates and validity periods
  • ✅ Assignment history - Record who assigned each deputy
  • ✅ Active/inactive status - Manage deputy status without deletion
  • ✅ Date validation - Automatic validation of validity periods
  • ✅ Relationship management - Easy methods for managing deputies

👥 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

📄 License

yii2-user it is available under a MIT License. Detailed information can be found in the LICENSE.md.

统计信息

  • 总下载量: 413
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 5
  • 点击次数: 0
  • 依赖项目数: 2
  • 推荐数: 0

GitHub 信息

  • Stars: 5
  • Watchers: 3
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2023-04-25