* [Update] 修改一部分bug

* [Update] 修改一些
This commit is contained in:
老广
2019-08-23 18:23:07 +08:00
committed by GitHub
parent de1a08a52f
commit 1fe18e8073
13 changed files with 146 additions and 175 deletions

View File

@@ -97,6 +97,7 @@ class AssetPermission(BasePermission):
args = [Q(granted_by_permissions=self)]
pattern = set()
nodes_keys = self.nodes.all().values_list('key', flat=True)
nodes_keys = Node.clean_children_keys(nodes_keys)
for key in nodes_keys:
pattern.add(r'^{0}$|^{0}:'.format(key))
pattern = '|'.join(list(pattern))

View File

@@ -2,24 +2,15 @@
#
from django.db.models.signals import m2m_changed, post_save, post_delete
from django.dispatch import receiver
from django.db import transaction
from common.utils import get_logger
from common.decorator import on_transaction_commit
from .models import AssetPermission
logger = get_logger(__file__)
def on_transaction_commit(func):
"""
如果不调用on_commit, 对象创建时添加多对多字段值失败
"""
def inner(*args, **kwargs):
transaction.on_commit(lambda: func(*args, **kwargs))
return inner
@receiver(post_save, sender=AssetPermission, dispatch_uid="my_unique_identifier")
@on_transaction_commit
def on_permission_created(sender, instance=None, created=False, **kwargs):

View File

@@ -1,6 +1,5 @@
# coding: utf-8
import re
from collections import defaultdict
from functools import reduce
@@ -250,6 +249,7 @@ class AssetPermissionUtilV2:
return system_users_actions
def get_permissions_nodes_and_assets(self):
from assets.models import Node
permissions = self.permissions.values_list('assets', 'nodes__key').distinct()
nodes_keys = set()
assets_ids = set()
@@ -258,7 +258,7 @@ class AssetPermissionUtilV2:
assets_ids.add(asset_id)
if node_key:
nodes_keys.add(node_key)
nodes_keys = self.clean_nodes_keys(nodes_keys)
nodes_keys = Node.clean_children_keys(nodes_keys)
return nodes_keys, assets_ids
@staticmethod
@@ -297,20 +297,6 @@ class AssetPermissionUtilV2:
queryset = Asset.objects.filter(id__in=assets_ids)
return queryset.valid().distinct()
@staticmethod
def clean_nodes_keys(nodes_keys):
nodes_keys = sorted(list(nodes_keys), key=lambda x: (len(x), x))
nodes_keys_clean = []
for key in nodes_keys[::-1]:
found = False
for k in nodes_keys:
if key.startswith(k + ':'):
found = True
break
if not found:
nodes_keys_clean.append(key)
return nodes_keys_clean
def get_nodes(self):
return [n.identifier for n in self.user_tree.all_nodes_itr()]
@@ -357,7 +343,7 @@ class ParserNode:
'title': name,
'pId': node.parent_key,
'isParent': True,
'open': node.is_root(),
'open': node.is_org_root(),
'meta': {
'node': {
"id": node.id,

View File

@@ -51,7 +51,8 @@ class AssetPermissionCreateView(PermissionsMixin, CreateView):
if nodes_id:
nodes_id = nodes_id.split(",")
nodes = Node.objects.filter(id__in=nodes_id).exclude(id=Node.root().id)
nodes = Node.objects.filter(id__in=nodes_id)\
.exclude(id=Node.org_root().id)
form['nodes'].initial = nodes
if assets_id:
assets_id = assets_id.split(",")