一种python/django活动目录组管理抽象,使用ldap3作为后端以实现跨平台兼容性。
ldap-groups的Python项目详细描述
一个python/django活动目录组管理抽象,它使用ldap3作为后端实现跨平台兼容性。
图片::https://img.shields.io/travis/kavdev/ldap-groups/master.svg?style=flat square
:目标:https://travis ci.org/kavdev/ldap groups
…图片::https://img.shields.io/codecov/c/github/kavdev/ldap-groups/master.svg?style=flat square
:目标:http://codecov.io/github/kavdev/ldap-groups?分支=主
…图片::https://img.shields.io/requires/github/kavdev/ldap-groups.svg?style=flat square
:目标:https://requires.io/github/kavdev/ldap-groups/requirements/?分支=主
…图片::https://img.shields.io/codacy/f8b8c71b805e4585b8c34ba7c02fbd0c.svg?style=flat square
:目标:https://www.codacy.com/app/kavdev/ldap groups/dashboard
…图片::https://img.shields.io/pypi/v/ldap-groups.svg?style=flat square
:目标:https://pypi.python.org/pypi/ldap groups
…图片::https://img.shields.io/pypi/dw/ldap-groups.svg?style=flat square
:目标:https://pypi.python.org/pypi/ldap groups
…图片::https://img.shields.io/github/issues/kavdev/ldap-groups.svg?style=flat square
:目标:https://github.com/kavdev/ldap groups/issues
。图片::https://img.shields.io/github/license/kavdev/ldap-groups.svg?style=flat square
:目标:https://github.com/kavdev/ldap groups/blob/master/license
installation
----
代码块::bash
代码::python
installed_apps=(
…
‘ldap_groups’,
…
)
django settings
----
在运行ldap组之前,必须配置一些设置。
*强制*
*`‘ldap_groups’_ uri``—LDAP服务器的uri,例如'ldap://example.com'
*``ldap-groups-base-dn`—基本搜索dn,例如'dc=example,dc=com'
*可选*
*``ldap-groups-bind-dn`—绑定用户的dn
*``ldap-groups-bind-password`—绑定用户的密码
nd user是可选的,许多服务器的安全设置将拒绝匿名访问。
*`` ldap_groups_user_lookup_attribute``查找用户时要搜索的属性(应该是唯一的)。默认为`'samaccountname``.
*`` ldap_groups_user_search_base_dn``查找用户时要使用的基本dn。默认为"ldap-groups-base-dn`.
*``ldap-groups-group-lookup-attribute``-查找组时要搜索的属性(应该是唯一的)。默认为`` name``.
*`` ldap_groups_group_search_base_dn``查找组时使用的基本dn。默认为"ldap-groups-base-dn"。
*`"ldap-groups-attribute-list`-在提取组成员时为每个成员返回的属性列表。空列表应返回所有属性。默认为`['displayname','samaccountname','distinguishedname']`.
usage
----
>在当前状态下,LDAP组可以执行以下功能:
*获取组的特定属性
*以字典形式获取组的所有属性
*get all m组的成员及其属性(用户)
*向组添加成员(用户)
*从组中删除成员(用户)
*向组添加子级(嵌套组)
*从组(嵌套组)中删除子级
*获取组(组和组织单位)的所有子级
*get一个组的所有子组(组和组织单位)
*遍历一个组的特定子组
*遍历一个组的父组
*遍历一个组的祖先
实例只需要一个参数就可以运行:一个组的可分辨名称。
一旦adgroup被实例化,剩下的就相当简单:
。代码::python
self.ad_group_instance=adgroup(group_dn)
def add_member(self):
self.ad_group_instance.add_member(account_name)
def remove_member(self):
self.ad_group_instance.remove_member(account_name)
返回self.ad_group_instance.get_member_info()
class adgroupinfo(object):
def_u init_u(self):
self.ad_group_instance=adgroup(group_dn)
def get_attributes(self):
返回self.ad_group_instance.get_attributes()
def get戋name(self):
返回self.ad戋group戋instance.get戋attribute(name戋attribute)
def get戋type(self):
返回self.ad戋group戋instance.get戋attribute(type戋attribute)
文档/
代码::python
"获取此组的传递属性。
:param attribute_name:要获取的属性的名称。
:type attribute_name:str
:param no_cache(可选):设置为如果为true,则直接从LDAP搜索而不是从缓存中提取属性。默认为False。
:键入no_cache:boolean
:返回:请求的属性,如果未设置属性,则返回none。
"
def get_attribute s(no_cache=False):
"返回此组属性的字典。此方法在第一次搜索后缓存属性,除非未指定任何缓存。
:param no_cache(可选):设置为true可直接从LDAP搜索而不是从缓存中提取属性。默认值为False
:键入no_cache:boolean
"
"搜索组并检索其成员。
:param page_size(可选):许多服务器对可重新搜索的结果数有限制。瑞德页面搜索绕过了这个限制。将页面大小调整为低于服务器的大小限制。(默认值:500)
:键入页面大小:int
"
def get_member_info(页面大小=500):
"从AD组对象检索成员信息。
:参数页面大小(可选):许多服务器对可以是r的结果数有限制铺展了。页面搜索绕过了这个限制。将页面大小调整为低于服务器的大小限制。(默认值:500)
:键入page-size:int
:返回基于ldap-groups属性列表设置或attr-list参数的广告组成员信息字典。
"
def get-tree-members():
"检索所有成员从树的此节点向下。"
def add_member(user_lookup_attribute_value):
"尝试将成员添加到AD组中。
:param user_lookup_attribute_value:ldap_group_user_lookup_attribute的值。
:键入user_lookup_attribute。_值:str
:如果提供的帐户不在活动目录中,则引发:**accountdoesnotexist**。(继承自_get_user_dn)
:如果帐户已存在于此组中,则引发:**entryalreadyexists**。(modificationfailed的子类)
:如果绑定用户没有权限,则引发:**权限不足**要修改此组。(modificationfailed的子类)
:如果由于不可预见的原因无法执行修改,则引发:**modificationfailed**。
"
>def remove_member(user_lookup_attribute_value):
"尝试从AD组中删除成员。
:param user_lookup_attribute_value:ldap_groups_user_lookup_attribute的值。
:键入user_lookup_attribute_value:str
:如果提供的帐户不在活动目录中,则引发:**accountdoesnotexist**。(继承自"获取用户"DN)
:如果绑定用户没有修改此组的权限,则引发:**权限不足**。(modificationfailed的子类)
:如果由于不可预见的原因无法执行修改,则引发:**modificationfailed**。
def add_child(group_lookup_attribute_value):
尝试将子类添加到AD组。
:param group_lookup_attribute_value:LDAP_groups_group_lookup_attribute的值。
:键入group_lookup_attribute_value:str
:如果提供的组不在活动目录中,则引发:**groupdoesnotexist**。(继承自'u get_group_dn)
:如果此组中已存在子项,则引发:**entryalreadyexists**。(modificationfailed的子类)
:如果绑定用户没有修改此组的权限,则引发:**insufficientpermissions**。(modificationfailed的子类)
:如果由于不可预见的原因无法执行修改,则引发:**modificationfailed**。
def remove_child(group_lookup_attribute_value):
尝试从AD组中删除子项。
:param group_lookup_attribute_value:ldap_group_lookup_attribute的值。
:键入group_lookup_attribute_value:str
:如果提供的组不在活动目录中,则引发:**groupdoesnotexist**。(继承自'u get_group_dn)
:如果此组中已存在子项,则引发:**entryalreadyexists**。(modificationfailed的子类)
:如果绑定用户没有修改此组的权限,则引发:**insufficientpermissions**。(modificationfailed的子类)
:如果由于不可预见的原因而无法执行修改,则引发:**modificationfailed**。
"
def get_denscents(page_size=500):
"返回此组的所有子代的列表。
:param页面大小(可选):许多服务器对可返回的结果数有限制。页面搜索绕过了这个限制。将页面大小调整为低于服务器的大小限制。(默认值:500)
:键入page-size:int
"
def get-u children(page-size=500):
"返回此组的子级列表。
:param page-size(可选):许多服务器对可返回的结果数有限制。页面搜索绕过了这个限制。将页面大小调整为低于服务器的大小限制。(默认值:500)
:键入page-size:int
"
def child(group-name,page-size=500):
"返回与提供的组名匹配的子广告组,如果子组不存在,则返回"无"。
:param group-name:子组的名称p.注意:名称不包含"cn="或"ou="
:类型组名:str
:参数页大小(可选):许多服务器对可返回的结果数有限制。页面搜索绕过了这个限制。将页面大小调整为低于服务器的大小限制。(默认值:500)
:键入页面大小:int
"
def parent():
""返回此组的父级(直到DC)"
def祖先(generation):
"返回给定一代(直到dc)的此组的祖先"。
:param generation:确定路径上的距离。示例:0=self,1=parent,2=grandrent…
:类型生成:int
"
ing参数:
…代码::python
adgroup(group_dn,server_uri,base_dn[,user_lookup_attr[,group_lookup_attr[,attr_list[,bind_dn,bind_password[,user_search_base_dn[,group_search_base_dn]]]]])
*`` group_dn`-要管理的组的可分辨名称。
*`` server_uri`-ldap服务器的uri,例如"ldap://example.com"
*``base``基本搜索dn,例如"dc=example,dc=com"
*``用户查找attr``查找用户时要搜索的属性(应该是唯一的)。默认为`'samaccountname``.
*`` group_lookup_attr``查找组时搜索的属性(应该是唯一的)。默认为``name``.
*``attr_list``-在提取组成员时为每个成员返回的属性列表。空列表应返回所有属性。默认为`['displayname','samaccountname','distinguishedname']`.
*``bind`u dn`-绑定用户的dn
*``bind`u password`-绑定用户的密码
*``user`search`u base`dn`-查找用户时要使用的基本dn。默认为"ldap-groups-base-dn"。
*`"group-search-base-dn`-查找组时要使用的基本dn。默认为"ldap-groups-base-dn"。
代码块::bash
./runtests.py
===
4.2.2(2016-09-14)
----
*添加了对使用adgroup作为上下文管理器的支持2
4.2.1(2015-12-23)
——————————————————————————————————————————————————————————————————————————————————不返回任何内容。(感谢@willson556)
4.2.0(2015-09-01)
----
*添加了get-tree-members方法
4.1.1(2015-08-28)
----
*更新了依赖项,转义查询错误修复
<4.1.0(2015-03-25)
----
现在,根据LDAP规范(除NUL字符外)重新正确转义
4.0.0(2014-11-10)
----
*添加了配置搜索基的功能,按现在指定的属性搜索用户/组
*添加了子添加/删除方法,重构了方法/类签名,添加属性缓存,所有查找现在都分页
3.0.4(2014-10-20)
----
*错误修复,重构
3.0.3(2014-10-13)
----
*错误修复
3.0.2(2014-10-08)
----
*错误修复
<3.0.1(2014-10-08)
----
*错误修复
3.0.0(2014-10-03)
----
*切换到python3 ldap
>2.5.3(2014-09-15)
----
*固定子搜索,添加自定义搜索功能
<2.5.2(2014-09-04)
--
*固定问题2,固定自述示例
2.5.1(2014-08-31)
----
*固定python ldap依赖关系限制(现在>;=)
2.5.0(2014-08-30)
----
*添加组属性和树遍历方法
2.0.0(2014-08-30)
-------
*删除了django依赖项
1.0.1(2013-09-05)
-------
*错误修复-不存在的用户也可以抛出类型错误
1.0.0(2013-08-26)
-------
*租赁
图片::https://img.shields.io/travis/kavdev/ldap-groups/master.svg?style=flat square
:目标:https://travis ci.org/kavdev/ldap groups
…图片::https://img.shields.io/codecov/c/github/kavdev/ldap-groups/master.svg?style=flat square
:目标:http://codecov.io/github/kavdev/ldap-groups?分支=主
…图片::https://img.shields.io/requires/github/kavdev/ldap-groups.svg?style=flat square
:目标:https://requires.io/github/kavdev/ldap-groups/requirements/?分支=主
…图片::https://img.shields.io/codacy/f8b8c71b805e4585b8c34ba7c02fbd0c.svg?style=flat square
:目标:https://www.codacy.com/app/kavdev/ldap groups/dashboard
…图片::https://img.shields.io/pypi/v/ldap-groups.svg?style=flat square
:目标:https://pypi.python.org/pypi/ldap groups
…图片::https://img.shields.io/pypi/dw/ldap-groups.svg?style=flat square
:目标:https://pypi.python.org/pypi/ldap groups
…图片::https://img.shields.io/github/issues/kavdev/ldap-groups.svg?style=flat square
:目标:https://github.com/kavdev/ldap groups/issues
。图片::https://img.shields.io/github/license/kavdev/ldap-groups.svg?style=flat square
:目标:https://github.com/kavdev/ldap groups/blob/master/license
installation
----
代码块::bash
代码::python
installed_apps=(
…
‘ldap_groups’,
…
)
django settings
----
在运行ldap组之前,必须配置一些设置。
*强制*
*`‘ldap_groups’_ uri``—LDAP服务器的uri,例如'ldap://example.com'
*``ldap-groups-base-dn`—基本搜索dn,例如'dc=example,dc=com'
*可选*
*``ldap-groups-bind-dn`—绑定用户的dn
*``ldap-groups-bind-password`—绑定用户的密码
nd user是可选的,许多服务器的安全设置将拒绝匿名访问。
*`` ldap_groups_user_lookup_attribute``查找用户时要搜索的属性(应该是唯一的)。默认为`'samaccountname``.
*`` ldap_groups_user_search_base_dn``查找用户时要使用的基本dn。默认为"ldap-groups-base-dn`.
*``ldap-groups-group-lookup-attribute``-查找组时要搜索的属性(应该是唯一的)。默认为`` name``.
*`` ldap_groups_group_search_base_dn``查找组时使用的基本dn。默认为"ldap-groups-base-dn"。
*`"ldap-groups-attribute-list`-在提取组成员时为每个成员返回的属性列表。空列表应返回所有属性。默认为`['displayname','samaccountname','distinguishedname']`.
usage
----
>在当前状态下,LDAP组可以执行以下功能:
*获取组的特定属性
*以字典形式获取组的所有属性
*get all m组的成员及其属性(用户)
*向组添加成员(用户)
*从组中删除成员(用户)
*向组添加子级(嵌套组)
*从组(嵌套组)中删除子级
*获取组(组和组织单位)的所有子级
*get一个组的所有子组(组和组织单位)
*遍历一个组的特定子组
*遍历一个组的父组
*遍历一个组的祖先
实例只需要一个参数就可以运行:一个组的可分辨名称。
一旦adgroup被实例化,剩下的就相当简单:
。代码::python
self.ad_group_instance=adgroup(group_dn)
def add_member(self):
self.ad_group_instance.add_member(account_name)
def remove_member(self):
self.ad_group_instance.remove_member(account_name)
class adgroupinfo(object):
def_u init_u(self):
self.ad_group_instance=adgroup(group_dn)
def get_attributes(self):
返回self.ad_group_instance.get_attributes()
def get戋name(self):
返回self.ad戋group戋instance.get戋attribute(name戋attribute)
def get戋type(self):
返回self.ad戋group戋instance.get戋attribute(type戋attribute)
文档/
代码::python
:param attribute_name:要获取的属性的名称。
:type attribute_name:str
:param no_cache(可选):设置为如果为true,则直接从LDAP搜索而不是从缓存中提取属性。默认为False。
:键入no_cache:boolean
:返回:请求的属性,如果未设置属性,则返回none。
"
def get_attribute s(no_cache=False):
"返回此组属性的字典。此方法在第一次搜索后缓存属性,除非未指定任何缓存。
:param no_cache(可选):设置为true可直接从LDAP搜索而不是从缓存中提取属性。默认值为False
:键入no_cache:boolean
"
:param page_size(可选):许多服务器对可重新搜索的结果数有限制。瑞德页面搜索绕过了这个限制。将页面大小调整为低于服务器的大小限制。(默认值:500)
:键入页面大小:int
"
def get_member_info(页面大小=500):
"从AD组对象检索成员信息。
:参数页面大小(可选):许多服务器对可以是r的结果数有限制铺展了。页面搜索绕过了这个限制。将页面大小调整为低于服务器的大小限制。(默认值:500)
:键入page-size:int
:返回基于ldap-groups属性列表设置或attr-list参数的广告组成员信息字典。
"
def get-tree-members():
"检索所有成员从树的此节点向下。"
def add_member(user_lookup_attribute_value):
"尝试将成员添加到AD组中。
:param user_lookup_attribute_value:ldap_group_user_lookup_attribute的值。
:键入user_lookup_attribute。_值:str
:如果提供的帐户不在活动目录中,则引发:**accountdoesnotexist**。(继承自_get_user_dn)
:如果帐户已存在于此组中,则引发:**entryalreadyexists**。(modificationfailed的子类)
:如果绑定用户没有权限,则引发:**权限不足**要修改此组。(modificationfailed的子类)
:如果由于不可预见的原因无法执行修改,则引发:**modificationfailed**。
"
>def remove_member(user_lookup_attribute_value):
"尝试从AD组中删除成员。
:param user_lookup_attribute_value:ldap_groups_user_lookup_attribute的值。
:键入user_lookup_attribute_value:str
:如果提供的帐户不在活动目录中,则引发:**accountdoesnotexist**。(继承自"获取用户"DN)
:如果绑定用户没有修改此组的权限,则引发:**权限不足**。(modificationfailed的子类)
:如果由于不可预见的原因无法执行修改,则引发:**modificationfailed**。
def add_child(group_lookup_attribute_value):
尝试将子类添加到AD组。
:param group_lookup_attribute_value:LDAP_groups_group_lookup_attribute的值。
:键入group_lookup_attribute_value:str
:如果提供的组不在活动目录中,则引发:**groupdoesnotexist**。(继承自'u get_group_dn)
:如果此组中已存在子项,则引发:**entryalreadyexists**。(modificationfailed的子类)
:如果绑定用户没有修改此组的权限,则引发:**insufficientpermissions**。(modificationfailed的子类)
:如果由于不可预见的原因无法执行修改,则引发:**modificationfailed**。
def remove_child(group_lookup_attribute_value):
尝试从AD组中删除子项。
:param group_lookup_attribute_value:ldap_group_lookup_attribute的值。
:键入group_lookup_attribute_value:str
:如果提供的组不在活动目录中,则引发:**groupdoesnotexist**。(继承自'u get_group_dn)
:如果此组中已存在子项,则引发:**entryalreadyexists**。(modificationfailed的子类)
:如果绑定用户没有修改此组的权限,则引发:**insufficientpermissions**。(modificationfailed的子类)
:如果由于不可预见的原因而无法执行修改,则引发:**modificationfailed**。
"
def get_denscents(page_size=500):
"返回此组的所有子代的列表。
:param页面大小(可选):许多服务器对可返回的结果数有限制。页面搜索绕过了这个限制。将页面大小调整为低于服务器的大小限制。(默认值:500)
:键入page-size:int
"
def get-u children(page-size=500):
"返回此组的子级列表。
:param page-size(可选):许多服务器对可返回的结果数有限制。页面搜索绕过了这个限制。将页面大小调整为低于服务器的大小限制。(默认值:500)
:键入page-size:int
"
def child(group-name,page-size=500):
"返回与提供的组名匹配的子广告组,如果子组不存在,则返回"无"。
:param group-name:子组的名称p.注意:名称不包含"cn="或"ou="
:类型组名:str
:参数页大小(可选):许多服务器对可返回的结果数有限制。页面搜索绕过了这个限制。将页面大小调整为低于服务器的大小限制。(默认值:500)
:键入页面大小:int
"
def parent():
""返回此组的父级(直到DC)"
def祖先(generation):
"返回给定一代(直到dc)的此组的祖先"。
:param generation:确定路径上的距离。示例:0=self,1=parent,2=grandrent…
:类型生成:int
"
ing参数:
…代码::python
adgroup(group_dn,server_uri,base_dn[,user_lookup_attr[,group_lookup_attr[,attr_list[,bind_dn,bind_password[,user_search_base_dn[,group_search_base_dn]]]]])
*`` group_dn`-要管理的组的可分辨名称。
*`` server_uri`-ldap服务器的uri,例如"ldap://example.com"
*``base``基本搜索dn,例如"dc=example,dc=com"
*``用户查找attr``查找用户时要搜索的属性(应该是唯一的)。默认为`'samaccountname``.
*`` group_lookup_attr``查找组时搜索的属性(应该是唯一的)。默认为``name``.
*``attr_list``-在提取组成员时为每个成员返回的属性列表。空列表应返回所有属性。默认为`['displayname','samaccountname','distinguishedname']`.
*``bind`u dn`-绑定用户的dn
*``bind`u password`-绑定用户的密码
*``user`search`u base`dn`-查找用户时要使用的基本dn。默认为"ldap-groups-base-dn"。
*`"group-search-base-dn`-查找组时要使用的基本dn。默认为"ldap-groups-base-dn"。
代码块::bash
===
4.2.2(2016-09-14)
----
4.2.1(2015-12-23)
——————————————————————————————————————————————————————————————————————————————————不返回任何内容。(感谢@willson556)
4.2.0(2015-09-01)
----
*添加了get-tree-members方法
4.1.1(2015-08-28)
----
*更新了依赖项,转义查询错误修复
<4.1.0(2015-03-25)
----
现在,根据LDAP规范(除NUL字符外)重新正确转义
4.0.0(2014-11-10)
----
*添加了配置搜索基的功能,按现在指定的属性搜索用户/组
*添加了子添加/删除方法,重构了方法/类签名,添加属性缓存,所有查找现在都分页
3.0.4(2014-10-20)
----
*错误修复,重构
3.0.3(2014-10-13)
----
*错误修复
3.0.2(2014-10-08)
----
*错误修复
<3.0.1(2014-10-08)
----
*错误修复
3.0.0(2014-10-03)
----
*切换到python3 ldap
>2.5.3(2014-09-15)
----
*固定子搜索,添加自定义搜索功能
<2.5.2(2014-09-04)
--
*固定问题2,固定自述示例
2.5.1(2014-08-31)
----
*固定python ldap依赖关系限制(现在>;=)
2.5.0(2014-08-30)
----
*添加组属性和树遍历方法
2.0.0(2014-08-30)
-------
*删除了django依赖项
1.0.1(2013-09-05)
-------
*错误修复-不存在的用户也可以抛出类型错误
1.0.0(2013-08-26)
-------
*租赁