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

用于用户/帐户设置的Django应用程序,django,settings,django-permissions,Django,Settings,Django Permissions,我正在为开发一个项目做准备,并且正在制定我可以使用的东西。此项目将需要不同的基于组/用户的模型和对象权限和设置 我知道我可以使用django objectpermissions(https://github.com/washingtontimes/django-objectpermissions)djangos拥有模型权限。但在某些情况下,您不需要设置对象/模型权限,而是需要设置—此帐户/用户是否可以执行与特定对象或模型无关的操作。有人为此开发了应用程序吗?或者,当人们有这种需要时,他们会采取什

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

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

我也知道,这也有类似的作用-。但当我浏览代码时,我得到的印象是,这些设置都是基于用户的——我还需要基于组的设置

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

基本上。在我的项目中,我需要回答问题-这个用户能看到/做这件事吗?。那个“东西”很可能是一种观点。因此,其中一个答案几乎奏效。但我在视图中所做的检查并不是用户是否有权访问某个模型/对象。相反,如果用户启用了此设置,则表示如果用户组启用了此设置

Alan

对于“操作”(操作通常由视图实现)的权限,我通常使用装饰器

装饰师在这方面做得很好


您可以创建未链接到模型的用户权限

也许这就是你想要的:

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

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让我注意到这一点。我可以看到,这填补了同样的东西,这-做的地方。就像我说的-我需要的东西,更多的是设置应用程序,而不是权限。权限部分已包含:)。