Django权限管理粒度到按钮级别
bug解决
1,根目录不判断权限,注意: 必须加$, 才不会匹配其他url
valid_url_menu=["/login/", "/reg/", "/admin/.*", "/$"]
ret = re.match("/", "/orders/") print(ret) # 会匹配成功
2, urls.py
urlpatters = [ url(r"^/orders/add/$", views.order_add) ]
3, views.py
def order_add(request): return HttpResponse("添加订单")
4,销售没有add订单的方法,有查看订单的方法。url必须加上^$
...... permission_url = "^%s$" %permission_url ......
5,写session的语法应该写在rabc的组件里面。(rabc > rabc.py取session值。key的名字不能写死。)
rabc > service > initial.py
6, 视图引入
7,/orders/返回的页面
def orders(request): return render(request, "orders.html")
8, 点击添加订单,会跳转。如果是销售登陆,就不显示该按钮
9, get请求的时候就是拿到该用户所有的权限。如果有add权限就是显示add按钮
views.py
orders.html
注意: 这样的判断是有问题的。"/orders/add",添加按钮的url是固定的。如果是删除按钮呢。???
修改数据格式: permission_dict
写入到session的permission_list里多写点内容,把权限坐在组,权限的编号都写到session中。
结构改变了 --> permission_dict
# 方式2:
# 创建一个数据结构: 包含所有权限url,权限所在组,权限的编号
request.session["permission_dict"] = temp # [包含所有权限URL, 权限所在组,权限的编号]
分组: 表示找出订单里面所有按钮,再找出用户组里面的所有按钮
编号: 表示当前用户能看到(增,删,改, 查)的按钮。作用: 代替url有正则的权限,这样html好判断按钮是否显示。