django-rest-framework的非用户群TokenAuthentication

时间:2014-03-23 01:43:39

标签: django authentication permissions django-rest-framework api-key

我尝试使用令牌身份验证创建api。我的问题是,我不希望令牌与用户帐户相关联,而是与帐户模型相关联。

例如:

class Account(models.Model):
    slug =      models.SlugField()
    name =      models.CharField(max_length=255)
    website =   models.URLField(blank=True, default='')
    members =   models.ManyToManyField(User, through='AccountMember')

class AccountMember(models.Model):
    ADMIN       = 1
    MANAGER     = 2
    MEMBER      = 3
    ROLES = (
        (ADMIN,     'administrator'),
        (MANAGER,   'manager'),
        (MEMBER,    'member'),
    )
    user =          models.ForeignKey(User)
    account =       models.ForeignKey(Account)
    role =          models.PositiveSmallIntegerField(choices=ROLES)
    date_joined =   models.DateField(auto_now_add=True)

class Token(models.Model):
    """
    The default authorization token model.
    """
    key = models.CharField(max_length=40, primary_key=True)
    account = models.ForeignKey(Account, related_name='auth_tokens')
    only_allowed_ips = models.BooleanField(default=False)
    ip_list = models.TextField(default='', blank=True)
    created = models.DateTimeField(auto_now_add=True)

正如您所看到的,有多个用户与某个帐户相关联,因此将令牌分配给他们将毫无用处。

我还希望能够为帐户添加多个令牌。

有谁知道我可以向这样的系统添加身份验证/权限的最佳方式?

2 个答案:

答案 0 :(得分:1)

您必须复制以下类:

django.contrib.auth.backends.ModelBackend:检查身份验证和权限  django.contrib.auth.middleware.AuthenticationMiddleware:设置与请求链接的帐户

可能您必须创建另一个django.contrib.auth.models.Permission来存储您的帐户相关权限

答案 1 :(得分:1)

我自己就是面对这个问题。我决定做的是在我的应用程序中复制django rest框架的 authtoken模块,并应用我自己的修改。

您可以将文件夹从DRF的存储库中复制到您自己的应用程序文件夹中。请务必更改 settings.py application / authtoken / admin.py 中的相关字段,当然还要更改 application / authtoken / models.py中的相关字段