day78
15qitongxue
xuede 特别渣 性格特别好 每次都回来分享失败的经验,碰到谁就和谁分享
看了基础,去了何人说,回去整个项目再来
面试,要带着项目去。简历上。(这么多年的开发)
提高自我解决问题的能力
没有bug,怎么走
每天备份代码,做好调bug的准备
今日内容:
权限
思维导图的方式整理出来
bug1
'web' is not a registered namespace
return (reverse('web:customer')) 没有web 命名空间
bug 2
return render()
一般模板渲染有问题, 一般数据出错了 (前端html)
解决前端 : 把web: 都替换了
rbac/distribute/permissions/?uid=2
给用户分配不同的角色
分配权限
用户信息 角色不同了 他的权限也跟着变(角色已有的权限)(点击保存)
给角色分配不同的权限
点击BOSS(背景颜色变了) 所有权限都出来了 ,可以修改,保存
distribute_permissions
去改成数据结构 chlidren (写的非常复杂,不会前端,for循环里有数据联动)
distribute_permissions 2
用户uid
访问的时候没有保存 if uid ---》 有了保存
<a href="?uid={{ user.id }}">{{ user.name }}</a></li>
角色rid
直接就改了私有变量
_开头私有变量 (python中可以改,告诉别人是私有变量)
<td><a href="?{% gen_role_url request role.id %}">{{ role.name }}</a></td>
params = request.GET.copy() deepcopy也是这么改 _deepcopy 有mutable方法
params._mutable = True 下划线是私有变量 可以修改了=true
params['rid'] = rid
return params.urlencode() 编码 拼接字符串 rid = role.id rid=1
答辩如何答辩 {‘name’:'chao','xx':111} name=chao&xx=11
三个人站台上,全班提问
request.get 在url = ? 的时候才会拿到值
if 判断 把用户已有的角色 勾选上
用户分配角色 rid
<a href="?
权限
前端只负责给后端要数据,后端只给前端数据,怎么渲染不管
ajax做的 权限
res是数据 返回的是
parent = Fk('Permision')(和self ) 也行 关联自己 pid
weight 权重 排序的
list(permissions) json反序列化下的 列表套字典 safe=False (字典没错,别的要falseyixia )
jsonResponse(contype是json的,调用内部解析器,解析成内部的数据结构了)
$.each(循环) (i(索引),permission({'x1':xx},{'x2':xxx}))
组织数据 val [ermission]
import copy
request.GET.copy() copy方法
copy.copy(request.GET) __copy__
ES6 新增的模板语法
var s=''多行语法
‘menu_${menu_pk}’ id = 'menu_1'
json在线格式化
pid = none 父级
s = 'tr 一级菜单 tr 二级菜单'
input name = 'per_id' value={{pk}}
$(#body).append(s)
这样显示格式是可以的,渲染的不同
if (menu_title): tr tr
else : tr (tr (td td td))
根据per_${pk} #per_+parent_id append
![上一次pk 后一次根据per_append](E:\Download\qq_download\teacher_huatu_download\s20py\Django\day78\上一次pk 后一次根据per_append.png)
如果同处一个menu_id 的情况下,会生成,两个 信息管理 信息管理
所以给个if 条件 判断一级菜单是否生成了
if (#menu+menu_pk).length(或者不加length) : s = 'td'
$ (#menu+menu_pk).parent().append(s) 一级标签加
流程:
刚开始没有uid 没有rid 只有两条数据 和 权限的数据
if uid : vlaue_list = [(1,),(2,)] -->[1,2]
p_id_list = 权限有重复的 [1,2 ] 给了权限的ajax
--->permission2.html,role_id_list p_id_list
默认勾选
a 标签发了get请求 给了 渲染的成rid 渲染的p_id
if role.id in role_list : checked 模板的时候做
ajax模板渲染之后 发送的ajax ---》per_tree (发送了jsR)
拿到数据,生成标签,加到对应的页面位置
ajax var p_id_list = {{per_id_list}}
找到 value = pk 和 in p_id_list 一样的 给他加个checked
$.each(p_i_l,func(i,j){
})
有个ajax局部刷 ,点击user 或者 role 的话刷新
{% if role.id in role_id_list %} //[1,2,3,4]
<input type="checkbox" name="roles" value="{{ role.id }}" checked/>
{% else %}
<input type="checkbox" name="roles" value="{{ role.id }}"/>
{% endif %}
url: 'tree'
var per_id_list={{ per_id_list }} //[1,2,3,4]
$.each(per_id_list,function(i,j){
console.log($("[value='"+j+"']")[0])
$("#body [value='"+j+"']").prop("checked",true)
})
input生成标签的时候vlaue 是{{pk}} 值 默认值
3 简单版本
保存提交
用户的角色(自带权限)分配
user uid = 1
input name = 'postType' value = 'role' 就一个保存提交判断 是role 还是perssion
if method = 'post' and request.POST .get('postType') =='role':
l = request.getlist('roles')
user.first().roles.set(l) 基于对象的多表操作 对象.
roles 操作第三张表 set()先清空在赋值
user_list = 再查一遍 然后再渲染回去
role_list
给角色分配权限
自定义标签 + rid = 1 ? gen_role_
uid=1 & rid = 1 boss
rid request.GET.get('rid')
之前的是 p_id_list = user.pk=uid
现在应该是
else rid : p_id_list = models.Role.obj.filter('perssins__pk'=id).cla正向
if uid: p_id_list = models.user.obj.filter('perssins__pk'=id).cla
input name = 'postType' value = 'permission'
if re.method ="POST" and value = 'P':
l= request.POST.getlist('permission_id')
models.Role.objects.filter(pk=rid).first()取出对象.permissin.set(l)
r除了权限之外都是增删改查,但是业务要给人说,吹
总流程
两个bug
第一个点击消失,二级菜单 if 路径
第二个增删改查,点击消失 if pid
权限加到项目
1 settings 权限相关配置加到自己项目配置中
2 权限中间件更改一下,配置一下 (权限都写在rbac中,)(出现什么bug,心里有数)
(有一些功能对不上的,按着流程一步步揪)
3 白名单 ,登录
4 登录---表里面有没有这些数据--提取数据,session中 注入permission_list , [{'pid','title','url','pk'}]
5 登录认证,权限认证 request.session['permission_list'] request.path
6 url-视图-模板
7 模板渲染,左侧菜单栏权限(走到页面展示(流程图))
8 不同的客户对应不同的操作
9 权限管理 (角色的增删改查 权限的增删改查)
nbcrm
setting 给了 rbac.
setting 配置一下 white .setting.confire = ['','','','']
注意 : 路径分配
rbac 有个user表
nbapp 有个user表
from nbapp.models import UserInfo
class User(models.Model):
user = models.onttoonefield('nbapp.userinfo') 对应好了
查询的时候:
login 登录成功之后注入权限:
if user_obj :
用的是rbac 表里的对象 而不是nbapp
init_session(request,) rbac里的关联的用户表