2011-06-11 73 views
0

我想创建一个权限表,它将django用户和另一个表作为其外键。然后授予它权限。在models.py中应该有什么?如何在Django中独立于用户权限创建权限表?

的疑问,可以把跨作为两个单独的问题:

  1. 如何使用Django的用户(用户ID)在另一个应用程序中的外键被称为 权限。
  2. 如何使用由Django的产生,当执行syncdb是 完成为

该表(不同的应用程序)的priamry键,将用作该应用程序的权限外键表-ID。

回答

0

您最好创建一个User Profile - 这是一个可链接到User模型的模型,其中Profile模型包含您想要的任何键。然后你可以调用User.get_profile(),并获得一个模型对象,检查它有什么键。

0

对于该模型,您需要查看.contrib中的ContentTypes应用程序。 (https://docs.djangoproject.com/en/1.3/ref/contrib/contenttypes/),您可以为用户创建一个外键。

from django.contrib.auth.models import User 
from django.contrib.contenttypes.models import ContentType 

class Permission(models.Model): 
    user = models.ForeignKey(User) 
    table = models.ForeignKey(ContentType) 
    ### the rest of the model. 

然后在您的视图或什么:

perm = Permission() 
perm.user = request.user 
perm.table = ContentType.objects.get_for_model(TableToAddPermissionFor) 
perm.save() 
+0

一旦我有了给我奇怪的整数值的外键。如何使用外键来引用它是主键的表? – Hick 2011-06-23 22:07:23

+0

您需要阅读我链接的内容类型文档。 – Hutch 2011-06-30 19:37:14

1

是否有一个原因,你不能在django.contrib.auth使用权限的功能?通过使用Meta对象的permissions功能和Groups表,您可以轻松创建“X组用户可执行操作Y”的矩阵。

我越想到这一点,您的实现似乎越能反映组/权限功能,而没有额外的好处。详情请参阅https://docs.djangoproject.com/en/1.3/topics/auth/

+0

看到可能发生的问题是这样的。我不是从用户端授予权限,而是从文件上传端授予权限。当用户上传文件时,他只允许某些用户查看/修改文件。我认为用户给出的这个权限只允许我从用户的角度来看,而不是从文件的角度来看 – Hick 2011-06-11 17:49:37