306 |
306 |
return hash(tuple((at.name, at.required) for at in attributes))
|
307 |
307 |
|
308 |
308 |
|
|
309 |
class RoleSerializer(serializers.ModelSerializer):
|
|
310 |
ou = serializers.SlugRelatedField(
|
|
311 |
queryset=get_ou_model().objects.all(),
|
|
312 |
slug_field='ou__slug',
|
|
313 |
required=True, default=get_default_ou)
|
|
314 |
|
|
315 |
class Meta:
|
|
316 |
model = get_role_model()
|
|
317 |
|
|
318 |
|
309 |
319 |
class BaseUserSerializer(serializers.ModelSerializer):
|
310 |
320 |
ou = serializers.SlugRelatedField(
|
311 |
321 |
queryset=get_ou_model().objects.all(),
|
... | ... | |
576 |
586 |
return Response({'result': 1})
|
577 |
587 |
|
578 |
588 |
|
579 |
|
class RolesAPI(ExceptionHandlerMixin, APIView):
|
|
589 |
class RolesInOuAPI(ExceptionHandlerMixin, APIView, ModelViewSet):
|
|
590 |
|
|
591 |
def initial(self, request, *args, **kwargs):
|
|
592 |
super(RolesInOuAPI, self).initial(request, *args, **kwargs)
|
|
593 |
Role = get_role_model()
|
|
594 |
try:
|
|
595 |
self.role = get_object(Role, ou__slug=kwargs['ou_id_or_ou_slug'])
|
|
596 |
except MultipleObjectsReturned:
|
|
597 |
try:
|
|
598 |
self.role = get_object(Role, ou__id=kwargs['ou_id_or_ou_slug'])
|
|
599 |
except MultipleObjectsReturned:
|
|
600 |
pass
|
|
601 |
|
|
602 |
def post(self, request, *args, **kwargs):
|
|
603 |
logger = logging.getLogger(__name__)
|
|
604 |
|
|
605 |
Role = get_role_model()
|
|
606 |
try:
|
|
607 |
ou_id_or_ou_slug = kwargs['ou_id_or_ou_slug']
|
|
608 |
role_data = request.body.get('role_data')
|
|
609 |
slug = role_data['slug']
|
|
610 |
name = role_data['name']
|
|
611 |
# TODO create role...
|
|
612 |
except Exception as e:
|
|
613 |
logger.error('Couldn\'t create role')
|
|
614 |
return Response({'result': 0, 'detail': e},
|
|
615 |
status=status.HTTP_400_BAD_REQUEST)
|
|
616 |
|
|
617 |
return Response({'result': 1, 'detail': _('Role created')},
|
|
618 |
status=status.HTTP_201_CREATED)
|
|
619 |
|
|
620 |
def delete(self, request, *args, **kwargs):
|
|
621 |
logger = logging.getLogger(__name__)
|
|
622 |
Role = get_role_model()
|
|
623 |
try:
|
|
624 |
self.role.members.clear()
|
|
625 |
except:
|
|
626 |
logger.error('Couldn\'t unregister users in role %r',
|
|
627 |
self.role)
|
|
628 |
try:
|
|
629 |
Role.objects.filter(slug=self.role.slug).delete()
|
|
630 |
except:
|
|
631 |
logger.error('Couldn\'t achieve clean deletion for role %r',
|
|
632 |
self.role)
|
|
633 |
else:
|
|
634 |
logger.info('Successfully removed role %r', self.role)
|
|
635 |
|
|
636 |
roles_in_ou = RolesInOuAPI.as_view()
|
|
637 |
|
|
638 |
|
|
639 |
class RoleMembershipsAPI(ExceptionHandlerMixin, APIView):
|
580 |
640 |
permission_classes = (permissions.IsAuthenticated,)
|
581 |
641 |
|
582 |
642 |
def initial(self, request, *args, **kwargs):
|
583 |
|
super(RolesAPI, self).initial(request, *args, **kwargs)
|
|
643 |
super(RoleMembershipsAPI, self).initial(request, *args, **kwargs)
|
584 |
644 |
Role = get_role_model()
|
585 |
645 |
User = get_user_model()
|
586 |
646 |
self.role = get_object_or_404(Role, uuid=kwargs['role_uuid'])
|
... | ... | |
601 |
661 |
return Response({'result': 1, 'detail': _('User successfully removed from role')},
|
602 |
662 |
status=status.HTTP_200_OK)
|
603 |
663 |
|
604 |
|
roles = RolesAPI.as_view()
|
|
664 |
role_memberships = RoleMembershipsAPI.as_view()
|
605 |
665 |
|
606 |
666 |
|
607 |
667 |
class BaseOrganizationalUnitSerializer(serializers.ModelSerializer):
|
... | ... | |
620 |
680 |
router = SimpleRouter()
|
621 |
681 |
router.register(r'users', UsersAPI, base_name='a2-api-users')
|
622 |
682 |
router.register(r'ous', OrganizationalUnitAPI, base_name='a2-api-ous')
|
|
683 |
# router.register(r'roles', RolesAPO, base_name='a2-api-roles')
|
623 |
684 |
|
624 |
685 |
|
625 |
686 |
class CheckPasswordSerializer(serializers.Serializer):
|
626 |
|
-
|