django权限可基于组限制视图

时间:2019-01-18 01:13:23

标签: django django-forms django-authentication

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

2 个答案:

答案 0 :(得分:0)

您可以为不同的团队创建不同的html页面,例如办公室团队拥有自己的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')
)

答案 1 :(得分:0)

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