如何授予员工访问Django中新创建的用户的权限

时间:2018-10-22 08:11:11

标签: django python-2.7 django-models django-rest-framework django-middleware

我是Djnago和Python的新手。 我在Djnago中创建了名为StaffAccessMiddleware的中间件类 我使用social_django应用程序从Gmail创建用户,我想实现 is_staff = True并仅在用户首次登录DJango时分配至少一个组。

我的问题是如何在中间件中访问用户,并仅检查第一次用户将在此代码中输入,在这种情况下,我需要分配is_staff = True并在创建用户后分配组。

我试图创建如下所示的中间件类。

class StaffAccessMiddleware(object):
    def process_request(self, request):
        if hasattr(request, 'user') and request.user.is_authenticated():
                user = request.user
        if groups:
            groups[0].name
        return None

1 个答案:

答案 0 :(得分:1)

我建议您使用pipeline,如下所示:

  1. 添加自定义管道以将用户更新为is_staff=True
  2. 在该管道中,检查is_new参数并仅在is_newTrue时更新用户。当用户首次登录(即创建用户)时,Social-auth将发送is_new=True
  3. SOCIAL_AUTH_PIPELINE设置中添加您的自定义管道。
  4. 然后,您只能通过指定permission_required设置将某些视图限制为工作人员用户。

您的最终管道可能看起来像这样:

def make_new_user_as_staff(backend, user, is_new=False, *args, **kwargs):
    if backend.name == 'gmail' and is_new:
        user.is_staff = False
        user.save()

settings.py(或设置文件)中

SOCIAL_AUTH_PIPELINE = (
    #other pipelines goes here
    "<full-path-to-make_new_user_as_staff-pipeline>",
    #some other pipelines goes here
)

参考:https://python-social-auth-docs.readthedocs.io/en/latest/pipeline.html

让我知道我是否误解了您的查询/这不能解决您的问题