工具类

TreeNodeManger 结点管理

django_tree_perm.controller.TreeNodeManger

Bases: object

树结点管理类

node = typing.cast(TreeNode, node) instance-attribute

user = user instance-attribute

__init__(node=None, user=None, **kwargs)

初始化

Parameters:
  • node (Optional[TreeNode], default: None ) –

    结点对象

  • user (Optional[User], default: None ) –

    用户对象,传递该值后结点管理操作会校验权限

  • kwargs (Any, default: {} ) –

    node传递None时通过该参数获取结点

add_node(name, alias='', description='', parent=None, parent_id=None, parent_path=None, is_key=False, user=None) classmethod

新增树结点

Parameters:
  • name (Optional[str]) –

    结点唯一标识

  • alias (str, default: '' ) –

    别名

  • description (str, default: '' ) –

    简介描述

  • parent (Optional[TreeNode], default: None ) –

    父类结点对象

  • parent_id (Optional[int], default: None ) –

    父结点ID

  • parent_path (Optional[str], default: None ) –

    父结点路径,无父类结点数据时,新增为根结点

  • is_key (bool, default: False ) –

    bool, 是否作为Key, 为True时唯一标识name全局唯一

  • user (Optional[User], default: None ) –

    User, 操作用户对象

Raises:
  • PermDenyException

    无权限时抛出的异常

  • ParamsValidateException

    结点数据校验异常

Returns:

find_parent_node(parent=None, parent_id=None, parent_path=None, required=False) classmethod

根据参初始化父类结点,并判断结点是否能够作为父类结点

Parameters:
  • parent (Optional[TreeNode], default: None ) –

    父类结点

  • parent_id (Optional[int], default: None ) –

    父类结点ID

  • parent_path (Optional[str], default: None ) –

    父类结点路径

  • required (bool, default: False ) –

    初始化后父类结点是否允许为空

Raises:
  • ParamsValidateException

    结点数据校验异常

Returns:
  • Optional[TreeNode]

    父类结点对象,可为空

get_node_object(node=None, node_id=None, key_name=None, path=None, required=False, **kwargs) classmethod

获取结点对象

Parameters:
  • node (Optional[TreeNode], default: None ) –

    结点对象. Defaults to None.

  • node_id (Optional[int], default: None ) –

    int, 结点ID. Defaults to None.

  • key_name (Optional[str], default: None ) –

    str,is_key=True情况下的结点唯一标识. Defaults to None.

  • path (Optional[str], default: None ) –

    str, 结点路径. Defaults to None.

  • required (bool, default: False ) –

    bool, 初始化后父类结点是否允许为空. Defaults to False.

Raises:
  • ParamsValidateException

    结点数据校验异常

Returns:
  • Optional[TreeNode]

    结点对象,可为空

load_tree_data(data) classmethod

加载JSON树结构数据写入数据库中

Parameters:
  • data (List[dict]) –

    树结构数据

Returns:
  • int

    新增结点个数

move_path(parent=None, parent_id=None, parent_path=None)

更改结点的父类结点(即移动结点在树结构中的位置)

  • 会更新该结点下所有子结点的信息,主要是更新结点path属性;
  • 暂不允许将结点转为根结点,parent、parent_id、parent_path参数必须有一个;
  • 可用于恢复 disabled=True 的结点
Parameters:
  • parent (Optional[TreeNode], default: None ) –

    父类结点

  • parent_id (Optional[int], default: None ) –

    父类结点ID

  • parent_path (Optional[str], default: None ) –

    父类结点路径

Raises:
  • PermDenyException

    无权限时抛出的异常

  • ParamsValidateException

    结点数据校验异常

Returns:
  • int

    更新结点记录数量

remove(clear_chidren=False)

删除结点

  • 普通结点,直接删除数据库记录;
  • is_key=True 的结点,不允许删除数据库记录,删除操作仅将 disabled 置为 True
Parameters:
  • clear_chidren (bool, default: False ) –

    是否允许连带删除所有子结点. 若为False则有子结点不允许被删除.

Raises:
  • PermDenyException

    无权限时抛出的异常

  • ParamsValidateException

    结点数据校验异常

Returns:
  • int

    删除结点数据库记录的数量

to_json_tree(queryset, trace_to_root=True) classmethod

将查询的结点对象,转换成树型结构json数据;需追溯到根结点用于树型结构展示

Parameters:
  • queryset (QuerySet) –

    QuerySet[TreeNode], 结点查询条件

  • trace_to_root (bool, default: True ) –

    bool, 追溯到根结点数据. Defaults to True.

Returns:
  • List[dict]

    list[dict] 树型结构json数据

update_attrs(name=None, alias=None, description=None, parent_id=None, parent_path=None)

更新结点信息,参数不传递则表示不更新

Parameters:
  • name (Optional[str], default: None ) –

    唯一标识

  • alias (Optional[str], default: None ) –

    别名

  • description (Optional[str], default: None ) –

    简介

  • parent_id (Optional[int], default: None ) –

    父类结点ID

  • parent_path (Optional[str], default: None ) –

    父类结点路径

Raises:
  • PermDenyException

    无权限时抛出的异常

  • ParamsValidateException

    结点数据校验异常

PermManager 权限管理

django_tree_perm.controller.PermManager

Bases: object

权限管理

has_node_perm(user, path=None, key_name=None, roles=None, can_manage=False) classmethod

是否有某个结点的权限

  • 主要用于其他系统调用,判断用户是否有某key node的权限;
  • 结点的管理权限判断,需传递参数 can_manage=True;
Parameters:
  • user (Optional[User]) –

    用户

  • path (Optional[str], default: None ) –

    结点路径

  • key_name (Optional[str], default: None ) –

    key结点的标识

  • roles (Optional[List[str]], default: None ) –

    有限定角色的权限,有任意其中一种角色便是有权限. 不传递表示系统中任意角色都可行.

  • can_manage (bool, default: False ) –

    是否有管理结点的权限

Returns:
  • bool

    有无权限

has_tree_perm(user) classmethod

判断是否有树的管理权限; 仅 is_active 且 is_superuser 用户有关联权限

  • 操作新增根结点;
  • 对所有结点增删改查;
  • 对角色进行增删改查;
Parameters:
  • user (Optional[User]) –

    用户

Returns:
  • bool

    有无权限

其他

django_tree_perm.utils

工具模块

  • TREE_SPLIT_NODE_FLAG 定义树结点拼接path路径的分隔符
  • SAFE_METHODS 定义接口只读权限的 method

SAFE_METHODS = ('GET', 'HEAD', 'OPTIONS') module-attribute

TREE_SPLIT_NODE_FLAG = '.' module-attribute

get_path_parent(path)

获取树结点路径的直接父类路径

Parameters:
  • path (str) –

    树结点路径,eg: a.b.c

Returns:
  • str

    直接父类路径,eg: a.b

get_tree_paths(paths)

根据path获取所有父类路径

例如 "a.b.c" 返回 ["a", "a.b", "a.b.c"]

Parameters:
  • paths (Union[str, List[str]]) –

    输入树结点路径

Returns:
  • List[str]

    返回路径及其所有父类路径