前面的菜单、部门、职位与管理员管理功能完成后,接下来要处理的是将它们关联起来,根据职位管理中选定的权限控制菜单显示以及页面数据的访问和操作。
那么要怎么改造呢?我们可以通过用户的操作步骤来一步步进行处理,具体思路如下:
1.用户在管理端登录时,通过用户记录所绑定的职位信息,来确定用户所拥有的权限。我们可以在登录接口中,将该管理员的职位id存储到session中,以方便后续的调用。
2.登录成功后,跳转进入管理界口,在获取菜单列表时,需要对菜单列表进行处理,只列出当前用户有权限的菜单项。
3.在点击菜单进入相关数据页面或在数据页面进行增删改查等操作时,需要进行权限判断,判断是否有权限进行查看或操作。由于我们是前后端分离,所以权限只需要在接口进行处理。
首先我们来简单改造一下登录接口login.py,只需要在将职位id存储到session中就可以了
1 ##############################################################
2 ### 把用户信息保存到session中 ###
3 ##############################################################
4 manager_id = manager_result.get('id', 0)5 s['id'] =manager_id6 s['login_name'] =username7 s['positions_id'] = manager_result.get('positions_id', '')8 s.save()
找到上面内容,在里面插入 s['positions_id'] = manager_result.get('positions_id', '')
接下来改造菜单列表接口menu_info.py文件的@get('/api/main/menu_info/')接口,我们需要做以下操作:
1.首先从session中获取当前用户的职位id,然后根据职位id从职位表中读取对应的权限数据
2.其次在菜单的遍历组装过程中,添加判断用户的权限,没有权限的菜单项直接过滤掉
1 @get('/api/main/menu_info/')2 defcallback():3 """
4 主页面获取菜单列表数据5 """
6 #获取当前用户权限
7 session =web_helper.get_session()8 ifsession:9 _positions_logic =positions_logic.PositionsLogic()10 page_power = _positions_logic.get_page_power(session.get('positions_id'))11 else:12 page_power = ''
13 if notpage_power:14 return web_helper.return_msg(-404, '您的登录已超时,请重新登录')15
16 _menu_info_logic =menu_info_logic.MenuInfoLogic()17 #读取记录
18 result = _menu_info_logic.get_list('*', 'is_show and is_enabled', orderby='sort')19 ifresult:20 #定义最终输出的html存储变量
21 html = ''
22 for model in result.get('rows')