System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及计算机通讯,特别是一种使用路由树通配符管理菜单权限的方法级系统。
技术介绍
1、在后台系统中,每个功能菜单都对应一个特定的url地址,并且用户只有在菜单被授权的情况下才能访问。举例来说,假设有一个遵循restful风格的订单删除接口,其地址为api.xxx.com/order/{orderid},并且使用http的delete请求方法。这意味着每次访问时,url中的{orderid}都是动态变化的,那么要求菜单上配置上所有订单的删除地址,这显然不实际。传统的解决方法是不使用restful风格的url设计,而是采用诸如api.xxx.com/order/del?id={orderid}的路由方式。然而,这种方法不符合行业标准的restful接口设计原则。另外,如果接口需要包含版本号,比如api.xxx.com/{version}/order,那么每次增加新的接口版本都需要更新后台菜单配置和权限分配,这会带来重复的工作量。
技术实现思路
1、为克服上述问题,本专利技术的目的是提供一种使用路由树通配符管理菜单权限的方法,能够实现支持通配符来管理菜单路径与关联菜单编号的关系,支持快速的菜单路由和查找。
2、本专利技术采用以下方案实现:一种使用路由树通配符管理菜单权限的方法,所述方法包括如下步骤:
3、步骤s1、定义一个routenode结构体表示路由树节点,包含以下字段:path用于当前节点的路径,children是子节点的字典集合,data是关联菜单
4、步骤s2、遍历数据库中的所有菜单数据,将每个菜单路径url按照'/'分割成数组array,循环每个数组元素,从根节点root开始遍历和创建节点;
5、步骤s3、当用户访问菜单时,系统获取菜单路径url,将url按'/'分割成数组array,逐层从全局路由树的根节点开始递归查找,匹配路由树节点的路径path和路径数组元素的值,找到路径的最后一个元素中的菜单编号;
6、步骤s4、系统循环菜单编号集合,读取权限表判断用户是否有菜单编号的权限,如果任意一个菜单编号有权限则成功,如果都没有则返回失败。
7、进一步的,所述步骤s2中的循环每个数组元素,从根节点root开始遍历和创建节点进一步为:如果节点不存在,则创建新节点;如果已存在,则继续向下移动,直至处理完路径的最后一部分,并将菜单编号追加至最后一个路由节点的data数组中。
8、进一步的,所述步骤s3中的找到路径的最后一个元素中的菜单编号进一步为:匹配路由树节点的路径path和路径数组元素的值,如果当前节点的children集合中存在通配符'*'或者当前菜单接口地址数组的元素的子节点,则继续向下查找,直到找到路径的最后一个元素,并且该节点的data数组包含了菜单编号,表示成功找到对应的菜单编号集合;如果没有匹配的地址且也没有通配符'*'的子节点,代表没有找到匹配的路径,返回失败。
9、一种使用路由树通配符管理菜单权限的系统,所述系统包括所述定义模块、节点创建模块、菜单编号查找模块和权限验证模块;
10、所述定义模块:定义一个routenode结构体表示路由树节点,包含以下字段:path用于当前节点的路径,children是子节点的字典集合,data是关联菜单编号的数组,定义一个treemeta结构体,包含一个指向根节点的指针root,用于内存中存储全局路由树数据;
11、所述节点创建模块:遍历数据库中的所有菜单数据,将每个菜单路径url按照'/'分割成数组array,循环每个数组元素,从根节点root开始遍历和创建节点;
12、所述菜单编号查找模块:当用户访问菜单时,系统获取菜单路径url,将url按'/'分割成数组array,逐层从全局路由树的根节点开始递归查找,匹配路由树节点的路径path和路径数组元素的值,找到路径的最后一个元素中的菜单编号;
13、所述权限验证模块:系统循环菜单编号集合,读取权限表判断用户是否有菜单编号的权限,如果任意一个菜单编号有权限则成功,如果都没有则返回失败。
14、进一步的,所述节点创建模块中的循环每个数组元素,从根节点root开始遍历和创建节点进一步为:如果节点不存在,则创建新节点;如果已存在,则继续向下移动,直至处理完路径的最后一部分,并将菜单编号追加至最后一个路由节点的data数组中。
15、进一步的,所述菜单编号查找模块中的找到路径的最后一个元素中的菜单编号进一步为:匹配路由树节点的路径path和路径数组元素的值,如果当前节点的children集合中存在通配符'*'或者当前菜单接口地址数组的元素的子节点,则继续向下查找,直到找到路径的最后一个元素,并且该节点的data数组包含了菜单编号,表示成功找到对应的菜单编号集合;如果没有匹配的地址且也没有通配符'*'的子节点,代表没有找到匹配的路径,返回失败。
16、本专利技术的有益效果在于:本专利技术通过分割菜单url路径,把路径组织成一颗树形结构,叶子节点维护了菜单路径与关联菜单编号的关系,能够通过树结构进行高效的数据查找,并且支持配置通配符来代替菜单路径,由此支持更灵活的菜单地址规则。
本文档来自技高网...【技术保护点】
1.一种使用路由树通配符管理菜单权限的方法,其特征在于:所述方法包括如下步骤:
2.根据权利要求1所述的一种使用路由树通配符管理菜单权限的方法,其特征在于:所述步骤S2中的循环每个数组元素,从根节点Root开始遍历和创建节点进一步为:如果节点不存在,则创建新节点;如果已存在,则继续向下移动,直至处理完路径的最后一部分,并将菜单编号追加至最后一个路由节点的Data数组中。
3.根据权利要求1所述的一种使用路由树通配符管理菜单权限的方法,其特征在于:所述步骤S3中的找到路径的最后一个元素中的菜单编号进一步为:匹配路由树节点的路径Path和路径数组元素的值,如果当前节点的Children集合中存在通配符'*'或者当前菜单接口地址数组的元素的子节点,则继续向下查找,直到找到路径的最后一个元素,并且该节点的Data数组包含了菜单编号,表示成功找到对应的菜单编号集合;如果没有匹配的地址且也没有通配符'*'的子节点,代表没有找到匹配的路径,返回失败。
4.一种使用路由树通配符管理菜单权限的系统,其特征在于:所述系统包括所述定义模块、节点创建模块、菜单编号查找
5.根据权利要求4所述的一种使用路由树通配符管理菜单权限的系统,其特征在于,所述节点创建模块中的循环每个数组元素,从根节点Root开始遍历和创建节点进一步为:如果节点不存在,则创建新节点;如果已存在,则继续向下移动,直至处理完路径的最后一部分,并将菜单编号追加至最后一个路由节点的Data数组中。
6.根据权利要求4所述的一种使用路由树通配符管理菜单权限的系统,其特征在于,所述菜单编号查找模块中的找到路径的最后一个元素中的菜单编号进一步为:匹配路由树节点的路径Path和路径数组元素的值,如果当前节点的Children集合中存在通配符'*'或者当前菜单接口地址数组的元素的子节点,则继续向下查找,直到找到路径的最后一个元素,并且该节点的Data数组包含了菜单编号,表示成功找到对应的菜单编号集合;如果没有匹配的地址且也没有通配符'*'的子节点,代表没有找到匹配的路径,返回失败。
...【技术特征摘要】
1.一种使用路由树通配符管理菜单权限的方法,其特征在于:所述方法包括如下步骤:
2.根据权利要求1所述的一种使用路由树通配符管理菜单权限的方法,其特征在于:所述步骤s2中的循环每个数组元素,从根节点root开始遍历和创建节点进一步为:如果节点不存在,则创建新节点;如果已存在,则继续向下移动,直至处理完路径的最后一部分,并将菜单编号追加至最后一个路由节点的data数组中。
3.根据权利要求1所述的一种使用路由树通配符管理菜单权限的方法,其特征在于:所述步骤s3中的找到路径的最后一个元素中的菜单编号进一步为:匹配路由树节点的路径path和路径数组元素的值,如果当前节点的children集合中存在通配符'*'或者当前菜单接口地址数组的元素的子节点,则继续向下查找,直到找到路径的最后一个元素,并且该节点的data数组包含了菜单编号,表示成功找到对应的菜单编号集合;如果没有匹配的地址且也没有通配符'*'的子节点,代表没有找到匹配的路径,返回失败。
4.一种使用路由树通配符...
【专利技术属性】
技术研发人员:刘德建,叶伟,李佳,
申请(专利权)人:福建天晴在线互动科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。