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
秒。
- API_ROOT_URL
2.确定字段权限控制方案,定义序列化类
确定要控制字段显示和字段修改权限的场景,并分别定义多个序列化类,每个场景对应一个序列化类,并定义一个标签。
例如: 序列化类有三个字段name
,mobile
,address
。第一种情况允许用户修改所有字段并完整显示全部字段, 用标签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
, 默认字段名creater
、create_time
。list
对象,自定义字段名,第一个元素是创建者字段名,第二个是创建时间字段名。
reviser
v1.0.10 增加。
可选,记录修改者字段名,如果有这个属性,将根据登录用户自动填充修改者和修改时间字段。
属性值:True
, 默认字段名reviser
、modify_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
Release history Release notifications | RSS feed
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)
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3813ada1d27fc71bd7606284babe7b3fa15b88bce2ea78f956e246eefae87fb6 |
|
MD5 | 20d050b0c7a6a2e67869723b473f1283 |
|
BLAKE2b-256 | add7b3965c697e0b2af33775a6c28fc49fc2209378cf003d8695627b235d1771 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | e06e9a2a97d792a7cbadaa6ab569ee1f58d7453f53812339e7e4872d6a5aab0a |
|
MD5 | bb1484d7d901630eae9984d4933e15e8 |
|
BLAKE2b-256 | 5c44dafba902dd55a5fa6c7f0ea97e27975ff7e2ccdec43a49d98e1e467aaf7b |