【问题标题】:Country-based Super User Access基于国家/地区的超级用户访问
【发布时间】:2010-08-20 15:54:52
【问题描述】:

我希望为属于特定国家/地区的实体提供超级用户访问权限。

例如。瑞典 SU 只能管理瑞典实体等...

但是,我是 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 背景,所以我只是有点怀疑这是多么正确......

【问题讨论】:

  • 你应该试着让你的问题更容易理解。
  • 第二个代码 sn-p 中的 if 和第一个 elsif 条件相同。这是故意的吗?

标签: python django database-design django-models


【解决方案1】:

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

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

只要您不存储任何其他信息作为此关系的一部分,您就可以保留它而无需单独的模型 (SuperUserToCountry)。如果您确实打算存储其他信息,可以使用way for that too

这里不需要条件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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    相关资源
    最近更新 更多