Skip to main content

No project description provided

Project description

drfseriperm

Library for Django REST framework which provides permissions-based serialization


Installing

[!NOTE] It's recommended to activate Virtual Environment before installing drfseriperm

To clone and install required packages use the following command:

# linux/macOS
$ python3 -m pip install drfseriperm

# windows
$ py -3 -m pip install drfseriperm

Quick example

import rest_framework.permissions
import rest_framework.serializers

import drfseriperm


class DefaultUserFFP(drfseriperm.FieldsForPermissions):
    include = ['id', 'username', 'date_joined']
    extra_kwargs = {
        'username': {'read_only': True},
        'date_joined': {'read_only': True},
    }


class StaffFFP(drfseriperm.FieldsForPermissions):
    include = ['email']
    permissions = [rest_framework.permissions.IsAdminUser]
    extra_kwargs = {
        'username': {'read_only': False},
        'email': {'read_only': True},
    }


class UserSerializer(drfseriperm.PermissionBasedModelSerializerMixin,
                     rest_framework.serializers.ModelSerializer):

    class Meta:
        model = django.contrib.auth.models.User
        list_fields_for_permissions = [
            DefaultUserFFP,
            StaffFFP,
        ]

In the given example for all the users fields "id", "username", "date_joined" will be available, BUT staff and superusers will also have access to "email" field.
While using drfseriperm we should inherit our classes from the FieldsForPermissions (FFP) class, which works with include, exclude, extra_kwargs, permissions and http_methods attributes. Then FFP instances are built by the PermissionBasedModelSerializerMixin from list_fields_for_permissions meta attribute and then converted to the list of the available for the user fields


FieldsForPermissions

Container and formatter for parameters to be passed into PermissionBasedModelSerializerMixin.
Parameters:

  • include — names of fields to be included for some permission group
  • exclude — names of fields to be excluded for some permission group
  • permissions — permissions (DRF BasePermission instance) which are required to consider the FFP
  • extra_kwargs — extra kwargs for fields (e.g. "read_only", "required", "default"), has the same structure as the DRF extra_kwargs meta attribute (more information can be seen on Django REST framework official documentation). Note that these kwargs are applied to fields when the complete list of fields is built, so even if field is not specified in include or exclude it will anyway receive the extra kwargs
  • http_methods — names of http methods for which FFP is applied All of them can be either specified as a class attributes or passed as init params

PermissionBasedModelSerializerMixin

Mixin for DRF ModelSerializer which filters fields available for the user based on their permissions and request method. This mixin works with attributes specified in Meta class of a ModelSerializer subclass. Meta attributes:

  • list_fields_for_permissions - list containing subclasses or instances of FieldsForPermissions. DRF ALL_FIELDS (or __all__) are also appropriate values (to dynamically get this list "get_list_ffps()" method can be overriden, defaults to empty list)
  • inherit_list_fields_for_permissions - boolean value indicating if an FFP should inherit fields of a previous available for request FFP (to dynamically get this value "get_ffps_inherit_state()" method can be overriden, defaults to True)
  • reverse_list_fields_for_permissions - boolean value showing if mixin should apply FFPs specified in list_fields_for_permission in reversed order or not (to_dynamically get this value, "get_ffps_reverse_state()" method can be overriden, default to False)
  • inherit_fields_for_permissions_extra_kwargs - boolean value letting mixin know if FFPs should inherit extra kwargs of a previous available for request FFP (to dynamically get this value "get_extra_kwargs_inherit_state()" method can be overriden, defaults to True)
  • raise_for_no_fields - boolean value standing for raising an exception in case if no fields are available for request method (e.g. if all the FFPs have http_methods parameter set to ['GET'], then for other http methods the exception will be raised, to dynamically get this value "get_raise_for_no_fields_state()" method can be overriden, defaults to True)
  • no_fields_exception - DRF APIException subclass or instance, which is an exception to be raised in case if there are no fields available for a request and raise_for_no_fields is set to True (to dynamically get this value, "get_no_fields_exception()" method can be overriden, default to DRF MethodNotAllowed with 405 http status)

Also PermissionBasedModelSerializerMixin respects native meta attributes of ModelSerializer related to fields:

  • fields - list of field names, which will be included in all the FFPs passed
  • exclude - list of field names, which will be excluded from all the FFPs passed
  • extra_kwargs - dictionary containing field_name-field_properties pairs, which will be considered by all the FFPs passed

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

drfseriperm-1.0.2.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

drfseriperm-1.0.2-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file drfseriperm-1.0.2.tar.gz.

File metadata

  • Download URL: drfseriperm-1.0.2.tar.gz
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for drfseriperm-1.0.2.tar.gz
Algorithm Hash digest
SHA256 701f30cbc80e9274ca5a6407391de7791393038522751208c2caa78d06b8eae4
MD5 4ad8d288c5521412d9ed1fae0ec1c9e0
BLAKE2b-256 114aa1cd582ec2f8812eea2fd0897af8943f089cf7200f69ff2694d31b14de83

See more details on using hashes here.

File details

Details for the file drfseriperm-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: drfseriperm-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 10.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for drfseriperm-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c6a9e5577206ed264b13da403c4b6469ccd71efcfd70ff7aef0116968c03bf09
MD5 426de56fa1592fec49f9dce874425d53
BLAKE2b-256 3d32516f48bfe6720b03effdef1ae567f466bf548959701ff0ea82aeeb3b0166

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page