用于用户/帐户设置的Django应用程序
我正在为开发一个项目做准备,并且正在制定我可以使用的东西。此项目将需要不同的基于组/用户的模型和对象权限和设置 我知道我可以使用django objectpermissions(https://github.com/washingtontimes/django-objectpermissions)djangos拥有模型权限。但在某些情况下,您不需要设置对象/模型权限,而是需要设置—此帐户/用户是否可以执行与特定对象或模型无关的操作。有人为此开发了应用程序吗?或者,当人们有这种需要时,他们会采取什么样的方法?也许创建虚拟django模型,让djangos模型权限处理其余的 我也知道,这也有类似的作用-。但当我浏览代码时,我得到的印象是,这些设置都是基于用户的——我还需要基于组的设置 编辑:人们一直向我提供权限应用程序。我要找的不是权限应用程序,而是设置应用程序。这些设置/权限与任何对象都不相关 基本上。在我的项目中,我需要回答问题-这个用户能看到/做这件事吗?。那个“东西”很可能是一种观点。因此,其中一个答案几乎奏效。但我在视图中所做的检查并不是用户是否有权访问某个模型/对象。相反,如果用户启用了此设置,则表示如果用户组启用了此设置 Alan对于“操作”(操作通常由视图实现)的权限,我通常使用装饰器 装饰师在这方面做得很好用于用户/帐户设置的Django应用程序,django,settings,django-permissions,Django,Settings,Django Permissions,我正在为开发一个项目做准备,并且正在制定我可以使用的东西。此项目将需要不同的基于组/用户的模型和对象权限和设置 我知道我可以使用django objectpermissions(https://github.com/washingtontimes/django-objectpermissions)djangos拥有模型权限。但在某些情况下,您不需要设置对象/模型权限,而是需要设置—此帐户/用户是否可以执行与特定对象或模型无关的操作。有人为此开发了应用程序吗?或者,当人们有这种需要时,他们会采取什
您可以创建未链接到模型的用户权限 也许这就是你想要的:你可能需要为此创建自己的系统。这应该不会很难
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]
然后,您可以在视图中执行以下操作:
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
您可以轻松构建一个进行检查的装饰器,并向视图提供一个值列表(或单个项)。您可以执行基于组的权限检查。这是个好建议。但我不需要权限——我需要一些设置,它们不能完全基于用户——但必须基于组/帐户。Like-是否打开此帐户或组this或that。我应该为这个或那个创建虚拟模型,然后使用权限处理它吗?还是有这样的应用程序?我想说,按照Josh的建议,自己动手吧,谢谢Hanks让我注意到这一点。我可以看到,这填补了同样的东西,这-做的地方。就像我说的-我需要的东西,更多的是设置应用程序,而不是权限。权限部分已包含:)。