【问题标题】:django permissions to restrict view based on groupsdjango 权限来限制基于组的视图
【发布时间】:2019-06-12 06:39:13
【问题描述】:

我目前有一个订单管理应用。但是我正在为其创建的团队有两个部门,办公室和工厂,他们将使用相同的应用程序,但每个团队都可以访问他们需要的东西。如果我应该创建两个不同的应用程序来登录同一个系统(但这将是冗余代码),或者是否有任何其他方式可以设置权限,我会感到困惑。我尝试使用 django 管理员权限,但它们似乎不起作用。

【问题讨论】:

    标签: django django-forms django-authentication


    【解决方案1】:

    你可以为不同的团队创建不同的html页面,比如office团队有自己的html页面,工厂团队有不同的html页面。

    def user_login(request):
        if request.method == 'POST':
            username=request.POST.get('username')
            password = request.POST.get('password')
            user = authenticate(username=username,password=password)
            if user:
                if user.is_active:
                    if user.is_admin:
                        login(request,user)
                        return HttpResponseRedirect(reverse('adminpage'))
                        #return render(request,'admin.html')
                    else:
                        login(request,user)
                        return HttpResponseRedirect(reverse('userpage'))
                        #return render(request,'user.html')
                else:
                    return HttpResponseRedirect('Account not active')
            else:
                #message={"info":"someone tried to login and failed! ","details":"username :{} and password: {}".format(username,password)}
                return HttpResponse("someone tried to login and failed ! <br />details: <br />username: {} <br /> password:{} ".format(username,password))
        else:
            return render(request,'login.html')
    

    您可以根据条件创建具有指定角色的活动模型。(您可以为工厂和办公室创建单选按钮,并根据单选按钮对代码工作进行建模。

    class MyUser(AbstractBaseUser):
        email = models.EmailField(verbose_name='email address',max_length=255,unique=True,)
        full_name = models.CharField(max_length=255,null=True,blank=True)
        date_of_birth = models.DateField()
        is_active = models.BooleanField(default=True)
        is_admin = models.BooleanField(default=False)
        is_agent = models.BooleanField(default=False)
    

    选择是:

    USER_CHOICES = (
       ('is_admin','ADMIN'),
       ('is_agent', 'AGENT')
    )
    

    【讨论】:

    • 嗨,比普尔!非常感谢。这听起来很棒。但是如果他直接输入链接地址,用户不能直接到模板。我还扩展用户字段以设置角色字段。再次感谢。
    • 对不起,我不能完全理解,你想说如果任何用户直接输入:exampl.com/admin那么django如何管理这个。
    • 啊,现在我明白你想说的了。
    【解决方案2】:

    您可以为用户和员工提供相同的身份验证页面,并将他们重定向到相同的页面(假设 dashboard )。现在您可以在仪表板中添加一个链接,该链接仅在登录用户是超级用户时可见。该链接将重定向到管理界面。 仪表板可能是两个用户共同的东西。 希望这会有所帮助。

    【讨论】:

    • 啊,明白了!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2017-12-30
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多