如何将新列添加到权限表

Posted

技术标签:

【中文标题】如何将新列添加到权限表【英文标题】:how adding new colum to permission table 【发布时间】:2020-11-08 12:02:49 【问题描述】:

我是 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 权限模型字段是: 名称、content_type、代号我需要这样的::名称、content_type、代号、client_id强>

【问题讨论】:

看看django-object-permissions:pypi.org/project/django-object-permissions 听起来您在滥用权限对象。你想达到什么目的?在用户和客户端 ID 之间连接? IE用户是客户,只能看到属于他的信息?或者将多个客户端连接到用户,例如用户是多个客户端的经理并且只能看到与它们相关的信息?无论哪种方式,修改用户模型似乎更合理,向其中添加客户端 ID(或客户端 ID 列表),而不是权限类。你可以在这里看到一个例子:docs.djangoproject.com/en/3.0/topics/auth/customizing/… @YuriNudelman,嗨,谢谢你关心我有具有单一数据库模式的多租户(客户端)系统,我想在每个租户(客户端)中的用户权限之间分开 【参考方案1】:

我讨厌给出这样的答案,因为这不是对你直接问题的回答,但在这里看起来真的很像XY Problem。

如果我对您的理解正确,您希望为每个用户特定的每个客户端 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 和标准用户模型,没有测试它。

【讨论】:

以上是关于如何将新列添加到权限表的主要内容,如果未能解决你的问题,请参考以下文章

EntityFrameworkCore - 将新列添加到联接表

将新列添加到 Oracle 表后生成主键值

sql [ALTER TABLE ADD COLUMN]将新列添加到现有表#SQL

将新列添加到现有表中并使用 PL/SQL 中游标中的值更新它们

在迁移中向现有表添加新列

SqlAlchemy 将新字段添加到类并在表中创建相应的列