内容回顾:
1. ModelForm
- 是什么?
- 生成表单数据
- 请求数据格式进行校验
- 用法
class UserModelForm(forms.ModelForm):
class Meta:
model = models.UserInfo
# fields= "__all__"
fields= ['id','title'...]
# exclude = []
widgets = {
'title': forms.TextInput(attrs={'class':'form-control'})
}
error_messsages = {
'title':{
'required':'标题不能为空'
}
}
今日内容:
1. 业务
2. 权限系统(含有一级菜单的权限系统)
内容详细:
1. 业务
- 课程管理
- 知识点:
- ModelForm
- 页面对form对象循环
- 重写init方法实现bootstrap样式的应用
- 错误信息的中文
- 模板重用
- change.html(添加、编辑)
- delete.html(删除)
- 添加用户
- 知识点:
- ModelForm自定义字段
- 钩子函数
2. 权限
- 每个公司都有权限系统。
- 问题:在web程序中,你认为什么是一个权限?
答案:一个URL就是一个权限。
- 问题:权限分配
答案:
一个人拥有权限多 URL多
- 问题:人和权限的关系
设计思路:
方案一:基于用户权限管理
用户表
权限表
用户权限的关系表
方案二:基于角色的权限控制 rbac
- 用户表
- 角色
- 权限
- 用户角色关系表
- 角色权限关系表
RBAC系统实现:
- 权限控制
- 用户表在rbac和crm业务中都存在。将rbac中的用户表变成一个“抽象类”,不再数据库生成而是作为基类为其他用户表服务。
- 中间件中权限的白名单
- 使用admin手动录入权限信息
- 登录成功后做权限信息的初始化
- ORM连表查询
- 注意left join 会出现null
- 去重
- 数据进行结构化。
- 放入session
- 在中间件进行权限的校验
- 正则表达式 注意:起始和终止符
- 需要登录但无需权限校验(每个用户都要的权限,无需再进行分配,直接访问即可)
- 动态菜单(一级菜单)
- 用户登录后权限初始化时候: 菜单信息放入session
- inclusion_tag返回代码块:生成动态菜单(默认选中)
- 权限控制粒度到按钮级别