]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
правки по миграциям feature_fomichev_ERP-325J_category_manager_catalog
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 22 May 2026 08:13:38 +0000 (11:13 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 22 May 2026 08:13:38 +0000 (11:13 +0300)
erp24/migrations/m260522_120000_add_catmanager_rbac_to_rs_and_kik.php [new file with mode: 0644]

diff --git a/erp24/migrations/m260522_120000_add_catmanager_rbac_to_rs_and_kik.php b/erp24/migrations/m260522_120000_add_catmanager_rbac_to_rs_and_kik.php
new file mode 100644 (file)
index 0000000..096969c
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+
+declare(strict_types=1);
+
+use yii\db\Migration;
+use yii_app\records\AdminGroup;
+
+/**
+ * Даёт доступ к страницам категорийного менеджера (ERP-325):
+ *   /assortment-label, /products1c-nomenclature-markup, /products1c-nomenclature-actuality
+ *
+ * Группы:
+ *   7  (GROUP_BUSH_DIRECTOR  — Кустовой директор)    → view + manage
+ *  10  (GROUP_RS_DIRECTOR    — Директор розничной сети) → view + manage
+ *  82  (GROUP_KIK_MANAGER    — Менеджер контроля качества) → view + manage
+ *       (группа 82 уже имела разрешение из m260422, но могла не применить через auth/init)
+ *
+ * После применения ОБЯЗАТЕЛЬНО запустить:
+ *   php yii auth/init --force=1
+ *
+ * Флаг --force=1 обязателен, если cache/flush-all был запущен после предыдущих изменений —
+ * в этом случае dirty-флаг в кеше сброшен и команда без --force пропустит переприменение прав.
+ */
+class m260522_120000_add_catmanager_rbac_to_rs_and_kik extends Migration
+{
+    private const TABLE = 'erp24.admin_group_rbac_config';
+
+    private const PERMISSIONS = ['catmanager/view', 'catmanager/manage'];
+
+    private const TARGET_GROUPS = [
+        AdminGroup::GROUP_BUSH_DIRECTOR,  // 7
+        AdminGroup::GROUP_RS_DIRECTOR,    // 10
+        AdminGroup::GROUP_KIK_MANAGER,    // 82
+    ];
+
+    public function safeUp(): void
+    {
+        foreach (self::TARGET_GROUPS as $groupId) {
+            $existing = $this->db->createCommand(
+                'SELECT config FROM ' . self::TABLE . ' WHERE admin_group_id = :gid',
+                [':gid' => $groupId]
+            )->queryScalar();
+
+            if ($existing === false) {
+                $this->insert(self::TABLE, [
+                    'admin_group_id' => $groupId,
+                    'config'         => implode(',', self::PERMISSIONS),
+                ]);
+                echo "  Группа {$groupId}: создана запись [" . implode(', ', self::PERMISSIONS) . "]\n";
+            } else {
+                $current = array_filter(array_map('trim', explode(',', (string)$existing)));
+                $merged  = array_values(array_unique(array_merge($current, self::PERMISSIONS)));
+                $added   = array_diff(self::PERMISSIONS, $current);
+                $this->update(self::TABLE, ['config' => implode(',', $merged)], ['admin_group_id' => $groupId]);
+                echo "  Группа {$groupId}: добавлено [" . implode(', ', $added ?: ['—уже было']) . "]\n";
+            }
+        }
+
+        \Yii::$app->cache->set('dirtyAuthSettings', true);
+
+        echo "\n";
+        echo "==============================================================\n";
+        echo " Запустите:\n";
+        echo "   php yii auth/init --force=1\n";
+        echo "==============================================================\n";
+    }
+
+    public function safeDown(): void
+    {
+        foreach (self::TARGET_GROUPS as $groupId) {
+            $existing = $this->db->createCommand(
+                'SELECT config FROM ' . self::TABLE . ' WHERE admin_group_id = :gid',
+                [':gid' => $groupId]
+            )->queryScalar();
+
+            if ($existing === false) {
+                continue;
+            }
+
+            $current  = array_filter(array_map('trim', explode(',', (string)$existing)));
+            $filtered = array_values(array_diff($current, self::PERMISSIONS));
+
+            if ($filtered === []) {
+                $this->delete(self::TABLE, ['admin_group_id' => $groupId]);
+            } else {
+                $this->update(self::TABLE, ['config' => implode(',', $filtered)], ['admin_group_id' => $groupId]);
+            }
+            echo "  Группа {$groupId}: разрешения удалены\n";
+        }
+
+        \Yii::$app->cache->set('dirtyAuthSettings', true);
+        echo "\nПосле отката запустите: php yii auth/init --force=1\n";
+    }
+}