• 八千流's avatar
    超级管理员可创建超级审计员并可设置审计员为组织审计员 (#3141) · a2376d3a
    八千流 authored
    * [Update] 超级管理员可创建超级审计员并可设置审计员为组织审计员
    
    * [Update] 修改小问题
    
    * [Update] 修改普通用户角色可以是组织审计员
    
    * [Update] 更改组织审计员切换组织问题
    
    * [Update] 修改小问题
    
    * [Update] 普通用户是组织审计员的页面左侧栏显示
    
    * [Update] 修改删除权限问题和组织显示问题
    
    * [Update] 优化逻辑
    
    * [Update] 优化类名
    
    * [Update] 修改小问题
    
    * [Update] 优化逻辑
    
    * [Update] 优化切换到某一个组织逻辑
    
    * [Update] 修改用户详情页的 删除/更新 按钮是否可点击
    
    * [Update] 优化代码
    
    * [Update] 组织管理列表增加审计员显示
    
    * [Update] 优化代码细节
    
    * [Update] 优化权限类逻辑
    
    * [Update] 优化导航菜单控制
    
    * [Update] 优化页面控制逻辑
    
    * [Update] 修改变量名错误问题
    
    * [Update] 修改页面上的小问题
    
    * [Update] 审计员或组织审计员能够更新个人部分信息
    
    * [Update] 用户名为admin的用户不能被删除
    
    * [Update] 不同用户在不同组织下扮演不同角色的权限不同,为了避免切换组织时出现403,重定向到index
    
    * [Update] 一个用户在同一个组织既是管理员又是审计员,隐藏个人信息模块,仅当是审计员,在当前组织显示个人信息模块
    
    * [Update] 修改方法命名
    
    * [Update] 优化代码细节
    
    * [Update] 修改命令执行列表方法
    
    * [Update] 优化用户之间操作的权限逻辑;添加 UserModel 的 property 属性;修改 Organization 的 related name 名称;
    
    * [Update] 修改OrgProcessor Anonymous问题
    
    * [Update] 修改用户序列类校验组织和转换raw密码的逻辑
    a2376d3a
serializers.py 2.83 KB

from rest_framework.serializers import ModelSerializer
from rest_framework import serializers

from users.models import User, UserGroup
from assets.models import Asset, Domain, AdminUser, SystemUser, Label
from perms.models import AssetPermission
from common.serializers import AdaptedBulkListSerializer
from .utils import set_current_org, get_current_org
from .models import Organization
from .mixins.serializers import OrgMembershipSerializerMixin


class OrgSerializer(ModelSerializer):
    class Meta:
        model = Organization
        list_serializer_class = AdaptedBulkListSerializer
        fields = '__all__'
        read_only_fields = ['created_by', 'date_created']


class OrgReadSerializer(ModelSerializer):
    admins = serializers.SlugRelatedField(slug_field='name', many=True, read_only=True)
    auditors = serializers.SlugRelatedField(slug_field='name', many=True, read_only=True)
    users = serializers.SlugRelatedField(slug_field='name', many=True, read_only=True)
    user_groups = serializers.SerializerMethodField()
    assets = serializers.SerializerMethodField()
    domains = serializers.SerializerMethodField()
    admin_users = serializers.SerializerMethodField()
    system_users = serializers.SerializerMethodField()
    labels = serializers.SerializerMethodField()
    perms = serializers.SerializerMethodField()

    class Meta:
        model = Organization
        fields = '__all__'

    @staticmethod
    def get_data_from_model(obj, model):
        current_org = get_current_org()
        set_current_org(Organization.root())
        if model == Asset:
            data = [o.hostname for o in model.objects.filter(org_id=obj.id)]
        else:
            data = [o.name for o in model.objects.filter(org_id=obj.id)]
        set_current_org(current_org)
        return data

    def get_user_groups(self, obj):
        return self.get_data_from_model(obj, UserGroup)

    def get_assets(self, obj):
        return self.get_data_from_model(obj, Asset)

    def get_domains(self, obj):
        return self.get_data_from_model(obj, Domain)

    def get_admin_users(self, obj):
        return self.get_data_from_model(obj, AdminUser)

    def get_system_users(self, obj):
        return self.get_data_from_model(obj, SystemUser)

    def get_labels(self, obj):
        return self.get_data_from_model(obj, Label)

    def get_perms(self, obj):
        return self.get_data_from_model(obj, AssetPermission)


class OrgMembershipAdminSerializer(OrgMembershipSerializerMixin, ModelSerializer):
    class Meta:
        model = Organization.admins.through
        list_serializer_class = AdaptedBulkListSerializer
        fields = '__all__'


class OrgMembershipUserSerializer(OrgMembershipSerializerMixin, ModelSerializer):
    class Meta:
        model = Organization.users.through
        list_serializer_class = AdaptedBulkListSerializer
        fields = '__all__'