您的位置:首页 > 编程语言 > Go语言

基于 Django1.10 文档的深入学习(17)——Customizing authentication 之 Custom users and permissions

2017-04-27 00:36 537 查看

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假定某些字段在用户模型上可用。 如果您的用户型号不提供这些字段,则在检查权限时会收到数据库错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐