`
phantom
  • 浏览: 163793 次
社区版块
存档分类
最新评论

AGILEJ的权限控制(角色树的算法)

阅读更多
<!---->

在权限控制的第一篇文中我们提到了在我们RBAC的模型中角色将是可继承性的,即如果角色A财务部经理是角色B财务员的父类,则角色A将会拥有角色B的所有权限,那么一个公司/组织的结构则是一个树型结构。在这里我们将会虚拟一个根节点,作为所有角色的祖先。如下图所示。

树的遍历通常有两种,第一种是按层次遍历,在图中的表示就是从根节点A开始,一层一层的向下走,每一个子节点按照它自己的parent节点来确定位置。通常使用这种遍历会保存节点的路径和该节点的父亲节点ID,对于图中K节点来说,它将会把路径ABCFK和F存储在自己的对象属性中。这种遍历的一个好处就是插入节点很方便,比如我要给K添加一个子节点,只需要查出K的路径,结合K对应的ID就可以了。但是如果是要求查询出一个节点(比如C)的所有子节点呢?很自然的想法是通过数据库的模糊查询找出路径属性包含C的所有记录,不过这样做就出现了一个性能问题,通过这种模糊查询方式速度会很慢。

第二种就是先根遍历,也是在AGILEJ的权限控制里面使用到的。具体的思想就是按照链状来构造树结构。如图所示,这颗树就是按照1-2-3... 20-21-22的顺序来遍历的。对于每个节点我们为其添加了两个属性--左值和右值。现在如果我们要查询节点C的所有子节点,只需要找出数据表中所有左值大于C左值(3)并且右值小于C右值(10)的所有节点即可,这样就避免了使用模糊查询。如果我只是要查出C节点下面所有子节点的数目而非详细信息,那么可以用(C的右值-C的左值-1)/2,即(10-3-1)/2=3,是不是很方便?不过这种算法也有弱点,就是插比起层次遍历的方法要麻烦点。比如我要为H添加一个子节点,那我必须将所有左值大于12的节点的左值加上2,所有右值大于12的节点的右值加2,然后插入一条数据,其左值为14,右值为 15.

简单实现(假设节点C对应的object为roleC):

  • 查询节点c的所有子节点:
    collection = find all role where role.left_value>roleC.leftValue and role.right_value<roleC.rightValue; 
  • 获得节点C的所有子节点个数:
    count = (roleC.rightValue-roleC.leftValue-1)/2
  • 在节点M后插入节点
    update role set role.leftValue=role.leftValue+2 where role.rightValue>roleM.rightValue
    update role set role.rightValue=role.rightValue+2 where role.rightValue>=roleM.rightValue
    now save new Node with leftValue=roleM.leftValue+1 and rightValue=roleM.leftValue+2

对于权限控制的模型来说,需要进行节点添加删除的操作相对比较少,而查询使用的却会很多。因此先根遍历是一个不错的选择。

分享到:
评论

相关推荐

    决策树算法经典优秀论文(1).zip

    决策树算法经典优秀论文(1).zip 决策树算法经典优秀论文(1).zip 决策树算法经典优秀论文(1).zip 决策树算法经典优秀论文(1).zip 决策树算法经典优秀论文(1).zip 决策树算法经典优秀论文(1).zip 决策树算法经典优秀...

    经典权限管理算法

    - **Web应用**:网站后台管理系统需要对管理员、编辑等不同角色进行权限控制,这种算法可以简化权限分配的工作量。 - **移动应用**:随着移动互联网的发展,移动应用同样面临着权限管理的需求,这种算法同样适用于...

    分布式协同控制算法

    分布式协同控制算法是一类多智能体系统(Multi-Agent Systems,简称MAS)中用以确保多个智能体能够协作完成共同任务的算法。这些算法能够使智能体在没有中心控制的情况下,通过信息交换与融合,彼此间协调行为,实现...

    决策树实现算法C语言编写

    决策树是一种广泛应用于数据挖掘和机器学习领域的算法,它的主要任务是通过构建一颗树状模型来做出预测或决策。在本案例中,标题指出我们关注的是"决策树实现算法C语言编写",这意味着我们将探讨如何用C语言实现决策...

    代码 最小生成树Prim算法代码

    代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小...

    决策树算法及参数说明

    这个参数控制着决策树算法可以处理的输入特征数量。如果输入特征数量过多,可能会导致算法计算时间增加、模型复杂度增加等问题。 2. MAXIMUM_OUTPUT_ATTRIBUTES:定义算法在调用功能选择之前可以处理的输出属性数。...

    【python代码实现】决策树分类算法、朴素贝叶斯分类算法以及人工神经网络分类算法的代码及数据

    资源中包括决策树分类算法、朴素贝叶斯分类算法、人工神经网络分类算法的代码(.ipynb,.py)和案例股票价格波动分析的数据(.csv),建议使用jupyter notebook打开.ipynb文件,体验更佳 1、资源配合博文《【python...

    决策树算法以及随机森林算法 (C++)

    决策树算法和随机森林是两种广泛应用的机器学习方法,尤其在分类问题中表现突出。本文将详细介绍这两种算法的原理、实现以及C++编程中的应用。 首先,决策树是一种基于树形结构进行决策的模型,每个内部节点代表一...

    西瓜书的西瓜数据集,用于决策树算法

    西瓜书的西瓜数据集,用于决策树算法

    C4.5决策树算法的Python代码和数据样本

    资源中包含完整的C4.5决策树算法Python代码和测试数据,其中有4个文件:C45.py是算法的实现代码,treePlotter.py是绘制决策树代码,PlayData.txt是样本数据,C45test.py用来构建、绘制并测试决策树,您可以运行该...

    决策树算法JAVA实现(包括C4.5和ID3)

    决策树算法是机器学习领域中常用的一种分类与回归方法,它的特点是直观易懂,易于解释。在Java中实现决策树,通常会涉及到两种经典算法:C4.5和ID3。接下来,我们将深入探讨这两种算法及其Java实现的关键点。 首先...

    权限管理树形结构demo

    3. **递归遍历**:为了展示和操作树形结构,需要实现递归遍历算法,以便从根节点开始,逐级展开所有子节点,同时获取每个节点的权限信息。 4. **动态加载**:考虑到性能和用户体验,树形结构可能采用懒加载或分页...

    小车巡线控制算法 最经典的PID控制算法

    【PID控制算法详解】 PID(Proportional-Integral-Derivative)控制算法是工业自动化领域中最常见、最基本的控制算法,其在小车巡线控制中也有广泛应用。PID控制器通过比例、积分和微分三个部分来调整输出,以使得...

    MPC、PP、Stanley、LQR、PID等控制算法的MATLAB程序实现

    在自动驾驶领域,控制算法起着至关重要的作用,它们确保车辆能够准确、稳定地按照预定路径行驶。本资源提供了五种常见的控制算法的MATLAB程序实现,包括MPC(Model Predictive Control)、PP(Pure Pursuit)、...

    多智能体系统:四叉树Dijkstra算法下的最优路径规划与避障控制技术解析,多智能体最优路径规划与避障控制 首先,利用四叉树算法构建环境路线图,有效地将空间划分为更小的区域 其次,采用基于图的优化算

    多智能体系统:四叉树Dijkstra算法下的最优路径规划与避障控制技术解析,多智能体最优路径规划与避障控制 首先,利用四叉树算法构建环境路线图,有效地将空间划分为更小的区域。 其次,采用基于图的优化算法Dijkstra...

    FP树增长算法的java实现

    FP树(FP-Growth)算法是一种在数据挖掘领域用于发现频繁项集的高效算法,它由Han等人在2000年提出。该算法通过构建一种特殊的树结构——FP树,来有效地存储和处理交易数据,从而显著减少了数据库的扫描次数,提高了...

    基于角色的用户权限系统设计

    基于角色的用户权限系统通过引入角色的概念,实现了更精细、更灵活的权限控制机制。该系统不仅提高了信息安全性,还能够更好地适应组织结构的变化和发展需求。未来的研究方向可以进一步探索如何优化角色分配算法,...

    地形渲染的动态LOD四叉树算法

    地形渲染的动态LOD四叉树算法,读者应该熟悉递归程序设计,以及基本的VC OpenGL编程.

    基于遗传算法的LQR控制器

    遗传算法在此过程中扮演了参数优化者的角色,可以处理复杂的非线性优化问题,尤其在系统模型存在不确定性和多目标优化的情况下,其优势更为明显。 源程序中,除了遗传算法的实现,还可能包含以下组件: 1. **系统...

    自适应PID控制算法

    ### 自适应PID控制算法 #### 引言 随着现代工业自动化水平的不断提高,控制系统的设计面临着越来越多的挑战。其中,如何使控制器能够根据被控对象的变化调整自身参数,以实现更优的控制效果,成为了研究的重点之一...

Global site tag (gtag.js) - Google Analytics