django实现用户权限
2019-02-24 本文已影响0人
sonic的简书
我们经常会有这样的需求,给不同的用户显示不同的页面,这样的功能在Django是怎么实现在的呢?
其实这个逻辑很简单,我们可以先预先设置好几个组,每个组显示的页面都不同,我们可以把用户分配到对应的组里面,具体来说:
第一当然是建立用户表,我们选择重写Django自带的用户表,这样就是继承abstractuser了,然后再settings里填入AUTH_USER_MODEL = 'users.UserProfile',在类里面添加我们新的字段即可.
django自带的权限管理更适合后台管理,来管理控制某个用户对后台操作的权限,就是 add, change, delete权限。
那我们怎么自定义权限呢?
首先要在models中建立权限的名称和描述信息,这个信息是在django admin中设置权限时显示的信息.另外还要注意的是,我们必须为url设置name, 因为权限需要和urlname配合使用,
第二,建立一个权限表Permission, 将权限的名称,url名称,请求方法(get or post), 参数列表保存进去
第三步, 定义判断权限的方法,这个就是描述你这个权限是干什么的,你想显示什么样的页面,就在这里面写好定义.
最终逻辑是这样的:
用户发送一个请求(打开一个页面), 先获取url地址,根据url地址得到urlname, 再获取请求方法和参数,然后使用(urlname, 请求方法,参数列表)这样一个映射关系,到数据库中查询,能查询到之后说明这个权限存在;然后再使用request.user.has_perm()来判断该用户是否具有该权限。
有权限,则根据我们第三步定义好的规则去返回,如果没有,则需要我们再定义一个403页面,这样的话,就大功告成啦.