Customizing authentication in Django在Django中自定义身份验证
Django附带的身份验证对于大多数常见的情况来说都是足够好的,但您可能无法通过开箱即用的默认值来满足要求。 要为您的项目需求定制身份验证,需要了解提供的系统的哪些点是可扩展的或可替换的。 本文档提供了有关如何自定义验证系统的详细信息。
认证后端提供可扩展的系统,用于当与用户模型存储的用户名和密码需要针对不同于Django默认的服务进行身份验证时。
您可以通过Django的授权系统为您的模型提供可以检查的自定义权限。
您可以扩展默认的用户模型,或者替换完全定制的模型。
自定义用户和权限
为了方便将Django的权限框架包含在您自己的用户类中,Django提供了PermissionsMixin
。 这是一个抽象模型,您可以将其包含在用户模型的类层次结构中,为您提供支持Django权限模型所需的所有方法和数据库字段。
PermissionsMixin
提供以下方法和属性:
class models.PermissionsMixin
is_superuser
:
布尔值。指定该用户具有所有权限,而不显式分配它们。
get_group_permissions(obj = None)
通过他们的组返回用户拥有的一组权限字符串。
如果传入obj,则只返回此特定对象的组权限。
get_all_permissions(obj = None)
通过组和用户权限返回用户拥有的一组权限字符串。
如果传入obj,则只返回此特定对象的权限。
has_perm(perm,obj = None)
如果用户具有指定的权限,则返回True
,其中perm
的格式为“<app label>。<permission codename>”
(请参阅权限)。如果用户不活动,此方法将始终返回False
。
如果传入obj,则此方法将不会检查模型的权限,而是检查此特定对象。
has_perms(perm_list,obj = None)
如果用户具有每个指定的权限,则返回True
,其中每个perm
的格式为“<app label>。<permission codename>”
。如果用户不活动,此方法将始终返回False
。
如果传入obj,则此方法将不会检查模型的权限,而是检查特定对象。
has_module_perms(package_name)
如果用户在给定的包(Django应用程序标签)中具有任何权限,则返回True。如果用户不活动,此方法将始终返回False。
PermissionsMixin和ModelBackend
如果不包含PermissionsMixin,则必须确保不调用ModelBackend上的权限方法。ModelBackend假定某些字段在用户模型上可用。 如果您的用户型号不提供这些字段,则在检查权限时会收到数据库错误。