разрешения django для ограничения просмотра на основе групп - PullRequest
0 голосов
/ 18 января 2019

У меня сейчас есть приложение для управления заказами. Но у команды, для которой я создаю это, есть два отдела: офис и фабрика, которые будут использовать одно и то же приложение, но у каждой команды будет доступ к тому, что им нужно. Я сбит с толку, если мне нужно создать два разных приложения для входа в одну и ту же систему (но это приведет к избыточному коду) или если есть какой-то другой способ, которым я могу установить разрешения. Я пытался использовать права администратора django, и они, похоже, не работают.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вы можете иметь одну и ту же страницу аутентификации для пользователей и персонала и перенаправлять их на одну и ту же страницу (предположим, dashboard). Теперь вы можете добавить ссылку на панель инструментов, которая отображается только в том случае, если вошедший в систему пользователь является суперпользователем. Ссылка будет перенаправлять на интерфейс администратора. Панель инструментов может быть чем-то общим для обоих пользователей. Надеюсь, это поможет.

0 голосов
/ 18 января 2019

вы можете создавать разные 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')
)
...