Просмотр поста #99365: Различные вопросы по PHP и MySQL

.
Rakovskiy
The Fast, Secure and Professional - Yii2

Ну тогда буду писать на русском потому. Вот моя дока.

модель (+/-)
<?php

namespace app\modules\admin\models;

use Yii;
use app\modules\admin\models\UsersPermissions;
use yii\helpers\Html;

/**
 * This is the model class for table "users_groups".
 *
 * @property integer $id
 * @property string $name
 * @property string $alias
 */
class UsersGroups extends \yii\db\ActiveRecord
{
    /**
     * Массив прав доступа
     */
    public $permissions = [];

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'users_groups';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['name', 'alias'], 'required'],
            [['name', 'alias'], 'string', 'max' => 50],
            ['name', 'unique', 'targetAttribute' => 'name', 'message' => 'Группа с таким названием уже существует'],
            ['alias', 'unique', 'targetAttribute' => 'alias', 'message' => 'Группа с таким алиасом уже существует'],
            [['permissions'], 'safe']
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'name' => 'Название',
            'alias' => 'Алиас',
            'permissions' => 'Права доступа'
        ];
    }

    /**
     * Получаем права доступа
     * @return array
     */
    public function getPermissions()
    {
        $items = [];
        foreach (UsersPermissions::find()->orderBy('module ASC')->all() as $item){
            $items[$item->id] = $item->module . '_' . $item->action;
        }
        return $items;
    }

    /**
     * Сохраняем отмеченые нами права доступа для группы
     * @return void
     */
    private function savePermission()
    {
        if (is_array($this->permissions) === false){
            $this->permissions = [];
        }

        $delete = [];
        $groupItems = UsersGroupPermissions::getPermissions($this->id);

        foreach ($this->getPermissions() as $key => $value){
            if (in_array($key, $this->permissions) === true){
                if (UsersGroupPermissions::inGroup($this->id, $key) === false){
                    $model = new UsersGroupPermissions();
                    $model->group = $this->id;
                    $model->permission = $key;
                    $model->save();
                }
            }elseif (in_array($key, $groupItems)){
                $delete[] = $key;
            }
        }

        if (empty($delete) === false){
            UsersGroupPermissions::deleteAll(['group' => $this->id, 'permission' => $delete]);
        }
    }

    /**
     * @inheritdoc
     */
    public function afterSave($insert, $changedAttributes){
        $this->savePermission();
        return parent::afterSave($insert, $changedAttributes);
    }
}