如何在Django身份验证系统中添加组?
Django配备了内置的权限系统,该系统将权限分配给特定用户或用户组。Django-admin站点使用的权限如下:
具有该类型对象“查看”或“更新”权限的用户可以访问查看对象。
只有具有该类型项目“添加”权限的用户才能访问“添加”表单并添加对象。
具有该类型项目“更改”权限的用户可以访问更改列表、“更改”表单以及更改对象的功能。
只有具有该对象类型“删除”权限的用户才能删除它。
可以为不同类型的对象以及特定对象实例设置权限。这可以通过使用has_add_permission()、has_view_permission()、has_change_permission()和has_delete_permission()方法来完成。
这些方法在ModelAdmin类中提供,使用这些方法可以自定义不同对象的权限。
#set user’s groups: Myuser.groups =group_list #to add or remove a user from a group the following commands can be used. Myuser.groups.add(grp1,grp2) Myuser.groups.remove(grp1,grp2) #To add, remove and clear all permissions the following commands can be used. Myuser.permissions=permission_list Myuser.permissions.add(p1,p2,p3) Myuser.permissions.remove(p1) Myuser.permissions.clear()
所有上述命令通常都写在views.py文件中。在这个文件中,接收用户输入的信息,并对其进行身份验证和授权。
因此,上述代码应该理想地在项目中的views.py文件中编写。
默认权限使用django.contrib.auth提供,该权限列在settings.py文件中的INSTALLED_APPS中。这将默认确保为项目中的所有模型提供添加、查看、更新和删除权限。
例如,您正在运行一个电子商务网站,您的网站的用户包括客户和员工,一个名为review的应用程序和一个名为product的模型。要检查用户是否具有与该模型相关的权限,可以使用以下代码行。
User.has_perm(‘review.add_product’) User.has_perm(‘review.remove_product’) User.has_perm(‘review.delete_product’) User.has_perm(‘review.view_product’)
要检查用户是否具有特定权限,而不是单独检查所有权限,还可以使用以下方法:
From django.contrib.auth.decorators import permission_required @permission_required(‘review.add_product’) Def fun(request): ‘’’can raise error stating that permission is denied.’’’
或者
{% if perms.review.add_product %}
以上代码行也可以用来检查用户是否具有权限。
自定义权限
如果Django提供的4种权限无法满足您的网站需求,您可以创建自定义权限。例如,查找产品权限。客户和员工都可以具有搜索产品的权限。
要设计自定义权限,您可以将其添加到产品模型权限中。
From django.db import models Class Product(models.Model); User=models.ForeignKey(User) Class Meta: Permissions=( (“search_product”,”search for vote”), )
Django中的组
Django组是权限列表。一个组包含多个用户。一个用户可以是多个组的一部分,一个组可以有多个用户。
使用组的主要优点是,组中的用户会自动拥有赋予该组的所有权限。可以创建多个组来限制权限。
要在Django中创建组,可以执行以下操作。
From django.contrib.auth.models import Group Employee_group,created=Group.objects.get_or_create(name=’employee’) To assign a set of permissions to a particular group Employee_group.permissions.set([list of permissions]) Employee_group.permissions.remove([list of permissions]) Employee_group.permissions.add([list of permissions]) Employee_group.permissions.clear()