如何在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()

更新于:2022年9月5日

3K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告