From 3eb1583c69dcd0daf8e154414abd2202880ca486 Mon Sep 17 00:00:00 2001
From: Eric <xplzv@126.com>
Date: Wed, 8 Nov 2023 17:46:32 +0800
Subject: [PATCH] =?UTF-8?q?perf:=20=E5=A2=9E=E5=8A=A0=E5=88=86=E4=BA=AB?=
 =?UTF-8?q?=E6=9D=83=E9=99=90=E4=BD=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 apps/common/db/fields.py                      |  6 ++---
 apps/perms/const.py                           |  2 ++
 .../migrations/0036_auto_20231108_1626.py     | 25 +++++++++++++++++++
 3 files changed, 29 insertions(+), 4 deletions(-)
 create mode 100644 apps/perms/migrations/0036_auto_20231108_1626.py

diff --git a/apps/common/db/fields.py b/apps/common/db/fields.py
index 83d522da5..1691fad1d 100644
--- a/apps/common/db/fields.py
+++ b/apps/common/db/fields.py
@@ -262,10 +262,8 @@ class BitChoices(models.IntegerChoices, TreeChoices):
 
     @classmethod
     def all(cls):
-        value = 0
-        for c in cls:
-            value |= c.value
-        return value
+        # 权限 12 位 最大值
+        return 4095
 
 
 class PortRangeField(models.CharField):
diff --git a/apps/perms/const.py b/apps/perms/const.py
index 373723a4b..7af66a45f 100644
--- a/apps/perms/const.py
+++ b/apps/perms/const.py
@@ -15,6 +15,7 @@ class ActionChoices(BitChoices):
     copy = bit(4), _("Copy") + " (RDP, VNC)"
     paste = bit(5), _("Paste") + " (RDP, VNC)"
     delete = bit(6), _("Delete") + " (SFTP)"
+    share = bit(7), _("Share") + " (SSH)"
 
     @classmethod
     def is_tree(cls):
@@ -26,6 +27,7 @@ class ActionChoices(BitChoices):
             cls.connect,
             (_("Transfer"), [cls.upload, cls.download, cls.delete]),
             (_("Clipboard"), [cls.copy, cls.paste]),
+            cls.share
         )
 
     @classmethod
diff --git a/apps/perms/migrations/0036_auto_20231108_1626.py b/apps/perms/migrations/0036_auto_20231108_1626.py
new file mode 100644
index 000000000..a0777abc5
--- /dev/null
+++ b/apps/perms/migrations/0036_auto_20231108_1626.py
@@ -0,0 +1,25 @@
+# Generated by Django 4.1.10 on 2023-11-08 08:26
+
+from django.db import migrations
+
+
+def migrate_action_all_value(apps, schema_editor):
+    old_max_bit = 63
+    new_max_bit = 4095
+    asset_permission_model = apps.get_model("perms", "AssetPermission")
+    db_alias = schema_editor.connection.alias
+    perms = list(asset_permission_model.objects.using(db_alias).filter(actions=old_max_bit))
+    for perm in perms:
+        perm.actions = new_max_bit
+    asset_permission_model.objects.bulk_update(perms, ['actions'])
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ('perms', '0035_auto_20231125_1025'),
+    ]
+    operations = [
+        migrations.RunPython(
+            code=migrate_action_all_value,
+        ),
+    ]