gpt4 book ai didi

用于用户/帐户设置的 Django 应用程序

转载 作者:行者123 更新时间:2023-12-01 15:06:19 25 4
gpt4 key购买 nike

我正在为开发一个项目做准备,并且正在规划我可以用于它的东西。该项目将需要不同的基于组/用户的模型和对象权限和设置。

我知道我可以使用 django-objectpermissions (https://github.com/washingtontimes/django-objectpermissions) 和 django 自己的模型权限。但是在某些情况下,当您真的不需要设置对象/模型权限时,而是需要设置 - 这个帐户/用户可以做一些与特定对象或模型无关的事情吗?有人为此开发了应用程序吗?或者当人们有这样的需要时会采取什么样的方法?也许创建虚拟 django 模型并让 django 模型权限处理其余部分?

我也知道,这会做类似的事情 - https://github.com/danielroseman/django-dbsettings .但是当我浏览代码时,我得到的印象是,这些设置都是基于用户的——我还需要基于组的设置。

编辑:人们不断向我提供权限应用。我要找的不是权限应用程序,而是设置应用程序。这些设置/权限与任何对象无关。

基本上。在我的项目中,我需要回答问题——这个用户可以看到/做这件事吗?。那个“东西”很可能是一个观点。所以其中一个答案几乎可行。但是我在查看时所做的检查不是用户是否有权访问某些模型/对象。相反,如果用户打开了此设置,或者用户组是否打开了此设置。

艾伦

最佳答案

您可能需要为此创建自己的系统。这应该不是很困难。

class Setting(models.Model):
name = models.CharField(..)
value = models.CharField(..)
users = models.ManyToManyField(User)
groups = models.ManyToManyField(Group)

@classmethod
def has_setting(cls, name, user):
user_settings = cls.objects.filter(name=name, users__in=[user]).count()
group_settings = cls.objects.filter(name=name, groups__in=user.groups.all()).count()
return user_settings or group_settings

@classmethod
def get_settings(cls, name, user, priority=User):
user_settings = list(cls.objects.filter(name=name, users__in=[user]))
group_settings = list(cls.objects.filter(name=name, groups__in=user.groups.all()))
if user_settings and not group_settings:
return user_settings
elif group_settings and not user_settings:
return group_settings
else:
return (group_settings, user_settings)[priority==User]

然后你可以在你的 View 中做这样的事情:

def display_frob(request):
if Setting.has_setting('display_frob', request.user):
settings = Setting.get_setting('display_from', request.user, priority=Group)
values = [setting.value for setting in settings]
# if the User was in many groups, we now have a list of values, for the setting
# `display_frob`, that aligns with each of those groups

您可以轻松构建一个装饰器来进行检查,并向 View 提供一个值列表(或单个项目)。

关于用于用户/帐户设置的 Django 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5053421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com