我需要 django 中 AbstractBaseUser 的 has_perm() 示例
I need has_perm() example for AbstractBaseUser in django
我有一个自定义用户模型,我需要向具有特定角色(用户模型中的字段)的用户授予权限,但我在互联网上找不到任何示例,所以我向任何人寻求示例谁以前做过这个。这是我的抽象用户模型供参考:
class User(AbstractBaseUser, PermissionsMixin):
class RoleChoices(models.TextChoices):
admin = 'Admin', _('Admin')
cashier = 'Cashier', _('Cashier')
waiter = 'Waiter', _('Waiter')
courier = 'Courier', _('Courier')
customer = 'Customer', _('Customer')
username = models.CharField(_('username'), unique=True, max_length=100)
name = models.CharField(_('name'), max_length=100)
surname = models.CharField(_('surname'), max_length=100)
phone_number = models.CharField(_('phone_number'), max_length=100, null=True, default='Invalid Phone Number')
role = models.CharField(max_length=50, choices=RoleChoices.choices, default=RoleChoices.customer)
active = models.BooleanField(default=True)
date_joined = models.DateTimeField(auto_now_add=True)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['name', 'surname']
class Meta:
ordering = ['date_joined', ]
def __str__(self):
return self.username
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_active(self):
return self.active
objects = CustomUserManager()
在此先感谢,如有任何语法错误,请原谅。
要为给定的模型对象创建自定义权限,请使用 Meta
class 的 permissions
属性。
class User(AbstractBaseUser, PermissionsMixin):
...
class Meta:
permissions = [
("change_role", "Can change the role of user"),
# Others customs permissions if needed
]
如果您现在想要检查用户是否有权更改角色,那么:
在.py文件中user.has_perm('app.change_role')
app是定义模型的app的名称
在模板文件中(.html)
当前登录的用户权限已存储在 {{ perms }}
模板变量中。按如下方式使用它:
{% if perms.app_label.change_role %}
<!-- Show whatever you need here -->
{% endif %}
注意: 这需要启用以下上下文处理器:django.contrib.auth.context_processors.auth
另请注意,如果您以超级用户身份登录,即使您拼错了权限名称,perms.app_label.foobar
也将始终为真。
此外,如果您想查看用户因其所属组而拥有的所有权限,请启动 Django shell...
user = User.objects.get(username='somename')
user.get_group_permissions()
如果要添加查看级别权限
from django.contrib.auth.decorators import permission_required
from django.contrib.auth.decorators import login_required
# Only user with app_name.change_role can access this url
@permission_required('app_name.change_role')
# Also protect the view with authenticated user
@login_required(login_url='/accounts/login/')
def my_protected_view(request):
# Do your secrets things here
我有一个自定义用户模型,我需要向具有特定角色(用户模型中的字段)的用户授予权限,但我在互联网上找不到任何示例,所以我向任何人寻求示例谁以前做过这个。这是我的抽象用户模型供参考:
class User(AbstractBaseUser, PermissionsMixin):
class RoleChoices(models.TextChoices):
admin = 'Admin', _('Admin')
cashier = 'Cashier', _('Cashier')
waiter = 'Waiter', _('Waiter')
courier = 'Courier', _('Courier')
customer = 'Customer', _('Customer')
username = models.CharField(_('username'), unique=True, max_length=100)
name = models.CharField(_('name'), max_length=100)
surname = models.CharField(_('surname'), max_length=100)
phone_number = models.CharField(_('phone_number'), max_length=100, null=True, default='Invalid Phone Number')
role = models.CharField(max_length=50, choices=RoleChoices.choices, default=RoleChoices.customer)
active = models.BooleanField(default=True)
date_joined = models.DateTimeField(auto_now_add=True)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['name', 'surname']
class Meta:
ordering = ['date_joined', ]
def __str__(self):
return self.username
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_active(self):
return self.active
objects = CustomUserManager()
在此先感谢,如有任何语法错误,请原谅。
要为给定的模型对象创建自定义权限,请使用 Meta
class 的 permissions
属性。
class User(AbstractBaseUser, PermissionsMixin):
...
class Meta:
permissions = [
("change_role", "Can change the role of user"),
# Others customs permissions if needed
]
如果您现在想要检查用户是否有权更改角色,那么:
在.py文件中user.has_perm('app.change_role')
app是定义模型的app的名称
在模板文件中(.html)
当前登录的用户权限已存储在 {{ perms }}
模板变量中。按如下方式使用它:
{% if perms.app_label.change_role %}
<!-- Show whatever you need here -->
{% endif %}
注意: 这需要启用以下上下文处理器:django.contrib.auth.context_processors.auth
另请注意,如果您以超级用户身份登录,即使您拼错了权限名称,perms.app_label.foobar
也将始终为真。
此外,如果您想查看用户因其所属组而拥有的所有权限,请启动 Django shell...
user = User.objects.get(username='somename')
user.get_group_permissions()
如果要添加查看级别权限
from django.contrib.auth.decorators import permission_required
from django.contrib.auth.decorators import login_required
# Only user with app_name.change_role can access this url
@permission_required('app_name.change_role')
# Also protect the view with authenticated user
@login_required(login_url='/accounts/login/')
def my_protected_view(request):
# Do your secrets things here