コード例 #1
0
ファイル: user_permission.py プロジェクト: zornil/jumpserver
 def direct_granted_asset_id_node_id_str_pairs(self):
     node_asset_pairs = Asset.nodes.through.objects.filter(
         asset_id__in=self.direct_granted_asset_ids).annotate(
             asset_id_str=output_as_string('asset_id'),
             node_id_str=output_as_string('node_id')).values_list(
                 'node_id_str', 'asset_id_str')
     node_asset_pairs = list(node_asset_pairs)
     return node_asset_pairs
コード例 #2
0
ファイル: user_permission.py プロジェクト: zornil/jumpserver
    def direct_granted_asset_ids(self) -> list:
        # 3.15
        asset_ids = AssetPermission.assets.through.objects.filter(
            assetpermission_id__in=self.asset_perm_ids).annotate(
                asset_id_str=output_as_string('asset_id')).values_list(
                    'asset_id_str', flat=True).distinct()

        asset_ids = list(asset_ids)
        return asset_ids
コード例 #3
0
ファイル: node.py プロジェクト: OnlyAthief/jumpserver
    def generate_node_all_asset_ids_mapping(cls, org_id):
        from .asset import Asset

        logger.info(f'Generate node asset mapping: '
                    f'thread={threading.get_ident()} '
                    f'org_id={org_id}')
        t1 = time.time()
        with tmp_to_org(org_id):
            node_ids_key = Node.objects.annotate(
                char_id=output_as_string('id')).values_list('char_id', 'key')

            # * 直接取出全部. filter(node__org_id=org_id)(大规模下会更慢)
            nodes_asset_ids = Asset.nodes.through.objects.all() \
                .annotate(char_node_id=output_as_string('node_id')) \
                .annotate(char_asset_id=output_as_string('asset_id')) \
                .values_list('char_node_id', 'char_asset_id')

            node_id_ancestor_keys_mapping = {
                node_id: cls.get_node_ancestor_keys(node_key, with_self=True)
                for node_id, node_key in node_ids_key
            }

            nodeid_assetsid_mapping = defaultdict(set)
            for node_id, asset_id in nodes_asset_ids:
                nodeid_assetsid_mapping[node_id].add(asset_id)

        t2 = time.time()

        mapping = defaultdict(set)
        for node_id, node_key in node_ids_key:
            asset_ids = nodeid_assetsid_mapping[node_id]
            node_ancestor_keys = node_id_ancestor_keys_mapping[node_id]
            for ancestor_key in node_ancestor_keys:
                mapping[ancestor_key].update(asset_ids)

        t3 = time.time()
        logger.info(
            't1-t2(DB Query): {} s, t3-t2(Generate mapping): {} s'.format(
                t2 - t1, t3 - t2))
        return mapping
コード例 #4
0
ファイル: utils.py プロジェクト: zunxhinwepac/jumpserver
    def test_it(cls):
        from assets.models import Node, Asset

        nodes = list(Node.objects.all())
        nodes_assets = Asset.nodes.through.objects.all()\
            .annotate(aid=output_as_string('asset_id'))\
            .values_list('node__key', 'aid')

        mapping = defaultdict(set)
        for key, asset_id in nodes_assets:
            mapping[key].add(asset_id)

        util = cls(nodes, mapping)
        util.generate()
        return util