Skip to main content

onlyuser client

Project description

onlyuserclient

统一认证服务Onlyuser客户端开发包,配合Onlyuser在微服务中实现角色权限控制,包括数据记录和字段权限控制。

依赖包

  • django >= 2.0.0
  • djangorestframework >= 3.10.0

安装

  • 源码包安装
python setup.py install
  • pip安装
pip install onlyuserclient  
# 升级
pip install -U onlyuserclient

快速开始

1.修改配置文件settings.py

添加以下配置项:

  • 添加中间件onlyuserclient.middlewares.RoleMiddleware到配置中
    MIDDLEWARE = [
        '....',
        'onlyuserclient.middlewares.RoleMiddleware',
    ]  
    
  • 添加onlyuserclient配置
    ONLYUSERCLIENT ={
        'API_ROOT_URL': 'http://onlyuser-service.test.svc.cluster.local',
        'API_TIMEOUT': 30,
        'API_HEADERS': {},
        'APIKEY_HEADER': 'apikey',
        'APIKEY': '',    
        'CACHE_API': False,
        'CACHE_TTL': 60,    
    }
    
    • API_ROOT_URL
      onlyuser服务的根URL, 根据实际部署环境正确配置。
    • API_TIMEOUT
      onlyuser的API接口访问超时(秒), 默认30秒。
    • API_HEADERS
      需要附加到访问onlyuser的请求中的http header, 是一个健值对,KEY就header名,VALUE是header值。
    • APIKEY_HEADER
      如果从集群外访问onlyuser,访问接口要求用key-auth方式鉴权,此配置项指定携带KEY的http header名称,默认是apikey,实际名称要与onlyuser服务端配置一致。
    • APIKEY
      key-auth的KEY,由onlyuser服务端提供。如果为None,表示不需要认证,默认是None
    • CACHE_API
      是否在本地缓存API访问结果,默认是False。onlyuserclient是使用Django内建的缓存功能,当你开启此项时,还需要同时配置settings.py中的CACHES
    • CACHE_TTL
      缓存有效时间,默认60秒。

2.确定字段权限控制方案,定义序列化类

确定要控制字段显示和字段修改权限的场景,并分别定义多个序列化类,每个场景对应一个序列化类,并定义一个标签。
例如: 序列化类有三个字段namemobileaddress。第一种情况允许用户修改所有字段并完整显示全部字段, 用标签all代表;第二种情况用户不能修改mobile字段,并且隐藏mobile字段中间4位,用*号代替, 用标签part代表;第三种情况全部字段都只能查看不能修改,并且隐藏address字段, 用*号代替, 用标签readonly代表;定义三个序列化类

from rest_framework import serializers
from .models import Demo
from onlyuserclient.serializers import HideCharField

class AllDemoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Demo
        fields = "__all__"

class PartDemoSerializer(serializers.ModelSerializer):
    mobile = HideCharField(max_length=11, hide_start=3,hide_end=7, fill_char='*')
    class Meta:
        model = Demo
        fields = "__all__"
        read_only_fields = ['mobile']


class ReadonlyDemoSerializer(serializers.ModelSerializer):
    address = HideCharField(max_length=11, hide_start=0,hide_end=-1, fill_char='*')
    class Meta:
        model = Demo
        fields = "__all__"
        read_only_fields = ['name','mobile','address']

3.定义视图集类

onlyuserclient.viewsets.RoleModelViewSet继承。这个类默认实现了按组织机构控制的数据记录权限控制,定义了五个标签:

  • all
    可以访问全部记录
  • owner
    可以访问用户自已拥有的记录
  • department
    可以访问本部门的全部用户的记录
  • branch
    可以访问本部门及下属机构全部用户的记录
  • organization
    可以操作所在组织整个组织机构树下全部用户的记录

视图类除了ModelViewSet的标准属性外,需要定义以下属性:

  • queryset
    必须定义,是Model的QuerySet对象。
  • user_relate_field
    必须定义,Model中关联User的字段名,此字段保存User对象的ID值,类型为CHAR(24)
  • serializer_classs
    必须定义,dict类型,key是tag, value是序列化类。
  • org_relate_field
    可选,保存Organization对象ID,默认是关联到根组织。
  • allow_not_auth
    可选,是否允许未鉴权访问,默认False
  • creater
    v1.0.10 增加
    可选,记录创建者字段名,如果有这个属性,将根据登录用户自动填充创建者和创建时间字段。
    属性值:
    • True, 默认字段名creatercreate_time
    • list对象,自定义字段名,第一个元素是创建者字段名,第二个是创建时间字段名。
  • reviser
    v1.0.10 增加
    可选,记录修改者字段名,如果有这个属性,将根据登录用户自动填充修改者和修改时间字段。
    属性值:
    • True, 默认字段名revisermodify_time
    • list对象,自定义字段名,第一个元素是修改者字段名,第二个是修改时间字段名。
from onlyuserclient.viewsets import RoleModelViewSet
from .serializers import DefaultDemoSerializer, CompleteDemoSerializer, HideDemoSerializer
from .models import RoleDemo

class RoleViewSet(RoleModelViewSet):
    queryset = RoleDemo.objects.all()
    user_relate_field = 'owner'
    serializer_classs = {
        'default': DefaultDemoSerializer,
        'complete': CompleteDemoSerializer,
        'part': HideDemoSerializer
    }

4.相关序列化字段参考

  • HideCharField
    可以部分隐藏的字符串字段,除了标准属性外,有以下属性:
    • fill_char
      隐藏部分的填充字符,默认是*
    • hide_start
      隐藏开始位置,从0开始。
    • hide_end
      隐藏结束位置,如果-1,表示到结尾。
  • RemotePkRelatedField
    主键远程关联字段,本地保存的字段值是远程资源的主键,有以下属性:
    • resource
      远程资源名
    • action
      查询资源对象的方法,默认就retrieve
    • fields
      序列化的资源字段列表
    • remote_api
      一个simple_rest_client.api.API对象,访问远程资源,只能在子类中定义,默认是onlyuserapi
  • UserRelatedField
    onlyuser的User关联字段
  • OrganizationRelatedField
    onlyuser的Organization关联字段
  • SummaryRelatedField
    关联字段摘要信息字段
  • ApplicationRelatedField
    onlyuser的Application关联字段
  • SelecterField
    选项字段,在序列化类中定义属性serializer_choice_field,值等于SelecterField
    
    

4.ChoicesModelMixin

为模型视图类混入选项字段的选项列表查询方法。

class ResourceViewSet(RoleModelViewSet, ChoicesModelMixin):
    pass

查询选项列表URL

GET resources/choices

返回结果格式

{
  "field1":[
    ["value1", "label1"],
    ["value2", "label2"]
  ],
  "field2":[
    ["value1", "label1"],
    ["value2", "label2"]
  ]
}

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

onlyuserclient-1.0.10.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

onlyuserclient-1.0.10-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file onlyuserclient-1.0.10.tar.gz.

File metadata

  • Download URL: onlyuserclient-1.0.10.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.7.9

File hashes

Hashes for onlyuserclient-1.0.10.tar.gz
Algorithm Hash digest
SHA256 3813ada1d27fc71bd7606284babe7b3fa15b88bce2ea78f956e246eefae87fb6
MD5 20d050b0c7a6a2e67869723b473f1283
BLAKE2b-256 add7b3965c697e0b2af33775a6c28fc49fc2209378cf003d8695627b235d1771

See more details on using hashes here.

File details

Details for the file onlyuserclient-1.0.10-py3-none-any.whl.

File metadata

  • Download URL: onlyuserclient-1.0.10-py3-none-any.whl
  • Upload date:
  • Size: 13.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.7.9

File hashes

Hashes for onlyuserclient-1.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 e06e9a2a97d792a7cbadaa6ab569ee1f58d7453f53812339e7e4872d6a5aab0a
MD5 bb1484d7d901630eae9984d4933e15e8
BLAKE2b-256 5c44dafba902dd55a5fa6c7f0ea97e27975ff7e2ccdec43a49d98e1e467aaf7b

See more details on using hashes here.

Supported by

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