【问题标题】:Django managing a user access list with manytomany fieldDjango 管理具有 manytomany 字段的用户访问列表
【发布时间】:2013-08-10 10:47:41
【问题描述】:

我在我的网站上使用 ManyToManyField 作为 access_list:

class Projects(models.Model):
    access_list = models.ManyToManyField(User)

在我的 Views.py 中,我将创建项目的用户保存到 access_list,然后我在 access_update.html 页面上的 access_list 中显示用户,用户可以在其中添加另一个名称提交到access_list,允许更多的合作者。还有一个删除用户按钮,您可以从access_list 中删除用户。

但我最担心的是,现在,如果用户在 access_list 上,他们可以进入并从 access_list 中删除原始创建者,并拒绝他们访问该项目。

我想拥有一个created_by = models.ForeignKey(User) 作为备份,这样我的权限将基于created_byaccess_list,但尝试拥有ForeignKey(User)ManyToManyField(User) 将无法在模型上验证.

有没有更好的方法来防止创建项目的用户被从列表中删除,同时仍然允许用户能够挑选他们的合作者列表?

【问题讨论】:

    标签: django manytomanyfield


    【解决方案1】:

    您可以在您的字段上添加related_name,它应该会验证:

    access_list = models.ManyToManyField(User, related_name='user_access_list')
    

    【讨论】:

    • 我的 ManyToManyField 现在验证了,该设置有效,问题更多的是 ManyToManyField 中的任何用户都可以从 ManyToManyField 中删除任何其他用户,包括他们自己,以及我想阻止什么。 “created_by = Models.ForeignKey(User)”会有所帮助,因为我可以将权限设置为 access_list created_by,但我不能同时拥有 ForeignKey(User) 和 ManyToManyField(User)模型。
    • 那么您希望在更改视图上隐藏access_list 并阻止它们在模型上保存到它?
    • 我希望 access_list 中的人能够在 access_list 中添加或删除用户,但我希望保护最初创建项目的人,以便 access_list 上的恶意人员可以' t 从所述 access_list 中删除所有人并禁用整个项目。现在,如果您创建一个新项目,您将被保存到 access_list 中,您可以将其他用户添加到其中。但是该列表中的另一个用户可能会删除原始用户。我想要某种方法来防止这种情况发生
    猜你喜欢
    • 2018-06-09
    • 2022-11-13
    • 2017-04-06
    • 2017-01-15
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多