def menu_tree_json(roleId): simplecache = SimpleCache.getInstance() tree = [] #未点击角色 if(roleId == 0): for key_cache in simplecache: obj_tmp = simplecache[key_cache] obj_tmp['checked'] = False tree.append(obj_tmp) #点击角色 else: rcs_access_right = Rcs_Access_Right.query.filter_by(role_id=roleId).order_by("id").all() for key_cache in simplecache: obj_tmp = simplecache[key_cache] obj_tmp['checked'] = False for obj_access_right in rcs_access_right: if(obj_tmp['levels'] != '4'): if(obj_tmp['id'] == obj_access_right.resource_id): obj_tmp['checked'] = True break; elif(obj_tmp['levels'] == '4'): if(obj_tmp['id'].split("_")[0] == obj_access_right.resource_id): if(int(obj_access_right.operations) & int(obj_tmp['id'].split("_")[1]) != 0): obj_tmp['checked'] = True break; tree.append(obj_tmp) return helpers.show_result_content(tree) # 返回json
def readMenuXml(path): #简单缓存 # Initialize SimpleCache() # Getting instance simplecache = SimpleCache.getInstance() tree = etree.parse(path)#将xml解析为树结构 root = tree.getroot()#获得该树的树根 for level_1 in root:#这样便可以遍历根元素的所有子元素(这里是article元素) id=level_1.get("id")#用.get("属性名")可以得到article元素相应属性的值 code=level_1.get("code") name=level_1.get("name") url=level_1.get("url") operations = level_1.get("operations") if(id == None): continue simplecache.set(id,{'id':id,'code':code,'name':name,'url':url,'levels':'1','pId':root.get("id"),'operations':0,'open':1}) for level_2 in level_1:#遍历article元素的所有子元素(这里是指article的author,name,volume,year等) id=level_2.get("id")#用.get("属性名")可以得到article元素相应属性的值 code=level_2.get("code") name=level_2.get("name") url=level_2.get("url") operations = level_2.get("operations") index = level_2.get("index") if(id == None): continue simplecache.set(id,{'id':id,'code':code,'name':name,'url':url,'levels':'2','pId':level_1.get("id"),'index':index,'operations':0,'open':0}) for level_3 in level_2:#遍历article元素的所有子元素(这里是指article的author,name,volume,year等) id=level_3.get("id")#用.get("属性名")可以得到article元素相应属性的值 code=level_3.get("code") name=level_3.get("name") url=level_3.get("url") operations = level_3.get("operations") if(id == None): continue simplecache.set(id,{'id':id,'code':code,'name':name,'url':url,'levels':'3','pId':level_2.get("id"),'operations':0,'open':1}) for type in operations.split("|"): op_id = ''.join([id,'_',getresource(type)['code']]) simplecache.set(op_id,{'id':op_id,'code':code,'name':getresource(type)['name'],'url':url,'levels':'4','pId':id,'operations':getresource(type)['code'],'open':1})
def index(): simplecache = SimpleCache.getInstance() tree = [] userrole = UserRole.query.filter_by(user_id=current_user.id).first() if userrole: role_id = userrole.role_id rcs_access_right = Rcs_Access_Right.query.filter_by(role_id=role_id).order_by("id").all() if(current_user.login_name == 'admin'): for key_cache in simplecache: obj_tmp = simplecache[key_cache] if(obj_tmp['levels'] == '2' or obj_tmp['levels'] == '3'): tree.append(obj_tmp) else: for key_cache in simplecache: obj_tmp = simplecache[key_cache] obj_tmp['checked'] = False for obj_access_right in rcs_access_right: if(obj_tmp['levels'] != '4'): if(obj_tmp['id'] == obj_access_right.resource_id): obj_tmp['checked'] = True break; elif(obj_tmp['levels'] == '4'): if(obj_tmp['id'].split("_")[0] == obj_access_right.resource_id): if(int(obj_access_right.operations) & int(obj_tmp['id'].split("_")[1]) != 0): obj_tmp['checked'] = True break; tree.append(obj_tmp) dellist = [] for obj in tree: if(obj['levels'] == '1' or obj['levels'] == '4' or obj['checked'] == False): dellist.append(obj) for obj in dellist: tree.remove(obj) return render_template("index.html",tree=tree)