用于django的scim 2.0提供程序规范的部分实现。
django_scim的Python项目详细描述
这是scim 2.0[1]的部分提供者端实现 Django使用规范。它包括:
- djangoUser对象到scim文档的序列化
- <prefix>/Users/uid 的rest视图
- <prefix>/Users/.search 的rest视图
- 涵盖所有运算符和大多数字段的SCIM筛选器查询分析器
- 有限的可插入性支持
请注意,目前唯一受支持的数据库是postgres。
安装
$ pip install django_scim
然后将django_scimapp添加到django设置中的INSTALLED_APPS 文件和必要的url映射:
urlpatterns = patterns('', url(r'^/scim/v2/Users/.search/?$', SearchView.as_view(), name='scim-search'), url(r'^/scim/v2/Users/([^/]+)$', UserView.as_view(), name='scim-user'), )
扩展性
默认情况下,django_scim使用User类上的email字段。然而, 如果应用程序使用自定义的 数据库表,您可以重写django_scim.models.SCIMUser并将其 输入:
from django_scim.models import SCIMUser as _SCIMUser from acme.apps.bb.models import Identity class SCIMUser(_SCIMUser): def __init__(self, user): super(SCIMUser, self).__init__(user) self.identities = (Identity.objects .filter(profile__user_id=self.user.id)) @property def emails(self): return {i.email: i.primary for i in self.identities}
在这里,我们将多个电子邮件地址保存在一个链接到 UserProfile。接下来,告诉视图使用这个类而不是 默认值:
url(r'^/scim/v2/Users/([^/]+)$', UserView.as_view(usercls=SCIMUser), name='scim-user'),
当您的电子邮件地址位于不同的表中时,您还需要扩展 筛选查询分析器,以确保可以在其上进行查询:
from django_scim.filter import SCIMFilterTransformer class AcmeSCIMTransformer(SCIMFilterTransformer): email = lambda *args: 'i.email' def join(self): return """ JOIN bb_userprofile p ON p.user_id = u.id LEFT OUTER JOIN bb_identity i ON i.profile_id = p.id """
并将其传递到视图:
url(r'^/scim/v2/Users/([^/]+)$', UserView.as_view(usercls=SCIMUser, parser=AcmeSCIMTransformer), name='scim-user'),
[1] | http://www.simplecloud.info/ |