mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.3 KiB
41 lines
1.3 KiB
# -*- coding: utf-8 -*-
|
|
#
|
|
from .base import BaseBackend
|
|
|
|
|
|
class AssetUserBackend(BaseBackend):
|
|
model = None
|
|
backend = "AssetUser"
|
|
|
|
@classmethod
|
|
def filter_queryset_more(cls, queryset):
|
|
return queryset
|
|
|
|
@classmethod
|
|
def filter(cls, username=None, assets=None, **kwargs):
|
|
queryset = cls.model.objects.all()
|
|
prefer_id = kwargs.get('prefer_id')
|
|
if prefer_id:
|
|
queryset = queryset.filter(id=prefer_id)
|
|
instances = cls.construct_authbook_objects(queryset, assets)
|
|
return instances
|
|
if username:
|
|
queryset = queryset.filter(username=username)
|
|
if assets:
|
|
queryset = queryset.filter(assets__in=assets).distinct()
|
|
queryset = cls.filter_queryset_more(queryset)
|
|
instances = cls.construct_authbook_objects(queryset, assets)
|
|
return instances
|
|
|
|
@classmethod
|
|
def construct_authbook_objects(cls, asset_users, assets):
|
|
instances = []
|
|
for asset_user in asset_users:
|
|
if not assets:
|
|
assets = asset_user.assets.all()
|
|
for asset in assets:
|
|
instance = asset_user.construct_to_authbook(asset)
|
|
instance.backend = cls.backend
|
|
instances.append(instance)
|
|
return instances
|