django|django 用户与权限管理
django中使用content_type表进行存储app与model的关系。在permission表中设立了name(权限的名字,中英文均可)content_type_id(与content_type是外键关系,用于绑定model)codename(在写代码时使用的权限名)那么如何自定义权限呢?
一、自定义权限
实例代码:
def add_permission(request) '''自定义创建新的权限''' # 获取model在content_type对象 content_type = ContentType.objects.get_for_model(Article) permission = Permission.objects.create(codename='black_article', name='拉黑文章', content_type=content_type) return HttpResponse('权限创建成功')
或者,在建立model时就添加上:
class Article(models.Model): title = models.CharField(max_length=64, verbose_name="标题") content = models.TextField(verbose_name="内容")class Meta: db_table = 'Article' permissions = [ ('black_article', '拉黑文章') ]
二、用户与权限绑定
权限本身只是一个数据,必须和用户进行绑定,才能起到作用。User模型和权限之间的管理,可以通过以下几种方式来管理:
1、mysuer.user_permissions.set(permission_list): 直接给定一个权限的列表。
2、mysuer.user_permissions.add(permission, permission,...): 一个个添加权限。
3、mysuer.user_permissions.remove(permission, permission,...): 一个个删除权限。
4、myuser.user_permissions.clear(): 清除权限。
5、myuser.get_all_permissions(): 获取所有的权限。
6、myser.has_perm('.
'): 判断是否拥有某个权限。权限参数时一个字符串,格式是:app_name.codename
实例代码:
def user_add_permission(request):
'''用户权限实例'''
# 获取当前登录的用户对象
user = request.user
# 获取app01的所有权限
content_type = ContentType.objects.get_for_model(app01)
permissions = Permission.objects.filter(content_type=content_type)
# 为当前用户添加app01的所有权限
# 方式一
user.user_permissions.set(permissions)
# 方式二
user.user_permissions.add(permissions[1], permissions[2])
user.save()
# 或者使用这个原理:*[1,2,3] = 1,2,3进行添加
user.user_permissions.add(*permissions)
user.save()
# 查看当前用户的所有权限
print(user.get_all_permissions())
# 删除当前用户所有权限
user.user_permissions.clear()
return HttpResponse('査看权限')
三、分组操作
1、Group.object.create(group_name):创建分组
2、group.permissions : 某个分组上的权限。多对多的关系。
1> group.permissions.add : 添加权限
2> group.permissions.remove : 移除权限
3> group.permissions.clear : 清除所有权限
4> user.get_group_premissions() : 获取用户所属组的权限。
3、user.groups : 某个用户上的所有分组。多对多的关系。
示例代码如下:
def operate_group(request):
group = Group.object.create(name='编辑')# 创建编辑这个分组
content_type = ContentType.object.get_for_model(Article) #
permissions = Permission.object.filter(content_type=content_type) # 获取Article表创建的所有权限
# 添加权限
group.permissions.set(permissions) # 方式一:直接将所有权限添加
group.permissions.add(*permissions) # 方式二:将所有权限添加
group.permissions.add([permissions[0],permissions[1]) # 添加指定的权限
group.save()
# 将用户添加到分组
group = Group.object.filter(name='编辑').first()
user = User.object.first()
user.group.add(group)
user.save()
return HttpResponse('成功')
四、在模版中使用权限管理:
【django|django 用户与权限管理】在settings.TEMPLATES.OPTIONS.context_processors下,因为添加了django.contrib.auth.context_processors.auth上下文处理器,因此在模版中可以直接通过perms来获取用户的所有权限。示例代码如下:
{% if perms.模型名.权限名 %}//拥有该权限名才会看到下面的链接
文章
{% endif %}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- django-前后端交互
- 我和你之前距离
- CGI,FastCGI,PHP-CGI与PHP-FPM