首页 > 解决方案 > 如何将新列添加到权限表

问题描述

我是 django new bay,我做了很多搜索但没有结果。

我需要将client_id 添加到 django 权限模型(保存和检索),因此在保存用户权限时 client_id 应该保存权限,当使用 has_perm 它应该检查当前用户的权限以获取当前 client_id

添加示例:

user.user_permissions.add(permiObject, request.session['ClientId'])

如果我检查,在模板中: {% if perms.app_name.perm_code %} 此检查应针对当前 ClientId

Django Permission 模型字段是: name,content_type,codename
我需要这样的::name,content_type,codename,client_id

标签: pythondjangoauthenticationpermissions

解决方案


我讨厌给出这样的答案,因为它不是你直接问题的答案,但它看起来真的像一个XY 问题

如果我对您的理解正确,您希望为每个客户 ID 的每个用户添加权限。

Django 权限背后的想法是它们应该在迁移时创建,即在您的服务器开始运行之前。在这里您添加了一些不自然的东西,客户端是在运行时添加的,因此您还需要在运行时修改权限。所以看起来 Django 权限不是你需要的。

如果我是您,我会做的只是为我自己的权限添加一个模型并通过外键将其连接到用户。

例如(伪代码):

class MyPermission(Model):
    name   = models.CharField(max_length=10)
    client = models.CharField(max_length=10)
    user   = models.ForeignKey(User, on_delete=models.CASCADE)

运行迁移,然后为某些用户添加新权限:

 user.mypermission_set.create(name="write", client="123")

并测试用户是否有权限:

 user.mypermission_set.filter(name="write", client="123").exists()

因此,如果我理解正确的话,希望这会有所帮助,而不是您想要的方式,而是提供相同的功能。

PS:也许你必须定义一个自定义用户模型,不确定 Django 是否会简单地接受mypermission_set与标准用户模型一起使用,没有测试它。


推荐阅读