基于国家的超级用户访问权限

3
我希望您能够为特定国家的实体提供超级用户访问权限。例如,瑞典超级用户只能管理瑞典实体等等。
然而,我对Django(正在接手一个旧系统)还不太了解,需要一些帮助。
我希望能够指定一个关系表。
我已经添加了一个用户配置文件,并在此基础上添加了一个新字段:super_user_country_link = models.ForeignKey(SuperUserToCountry, blank=True, null=True)。
然后,在下面新增了一个类。
class SuperUserToCountry(models.Model):
    user = models.ForeignKey(User)
    country = models.ForeignKey(Country) 

我计划运行脚本,为每个超级用户添加一个条目,并给他们提供到国家0(即没有国家=>完全su访问)的链接。 然后,随着我开始放置特定于国家的条目,我可以删除这些条目。 所以以后我可以调用(以房屋为例):

if user.is_superuser:
    if user.get_profile().super_user_county_link.country == 0:
        #show house detail...
    elsif user.get_profile().super_user_county_link.country == 0
        #show house detail...
    else
        pass

所以看起来,这意味着我可以在一个用户下列出多个国家,对吗?也许我想太多了,但是这看起来正确吗?

我来自php背景,所以对于这是否正确有些怀疑...


你应该尝试让你的问题更易理解。 - lprsd
你第二段代码中的 if 和第一个 elsif 条件是相同的。这是有意为之吗? - Manoj Govindan
1个回答

1

如果我错了,请纠正我。在我看来,您正在尝试建立UserProfileCountry之间的多对多关系。如果是这样,最好的方法是使用{{link1:ManyToManyField}}。像这样:

class UserProfile(models.Model):
    countries = models.ManyToManyField(Country)

如果您不存储此关系的任何其他信息,那么您可以将其保留为此而无需单独的模型(SuperUserToCountry)。如果您计划存储其他信息,则也有方法

这里不需要条件blank = Truenull = True。如果没有国家与用户配置文件相关联,则国家将返回一个空列表(即an_instance.countries.all()将为空)。

当您开始添加国家时,可以执行以下操作:

profile = User.get_profile()
denmark = Country.objects.get(name = 'Denmark')
russia  = Country.objects.get(name = 'Russia')

if denmark in profile.countries.all():
    print "Something is rotten in the state of Denmark"
elsif russia in profile.countries.all():
    print "In Soviet Russia, profiles have countries!"

根据您的具体需求,上述条件很可能可以更精确地表达。顺便说一下,您可以像这样向用户配置文件添加国家:

profile = User.get_profile()
denmark = Country.objects.get(name = 'Denmark')
profile.countries.add(denmark)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接