django я хочу ограничить страницы типами пользователей - PullRequest
0 голосов
/ 30 сентября 2019

Поскольку я новичок в django, я застреваю во многих местах.

Я работаю над проектом для моей компании, где пользователи делятся на три категории. В моей модели User я добавил три логических файла с именами category1, category2 и category3, с любым True из трех полей.

Теперь я не хочу, чтобы пользователь category1 имел доступ к шаблонам category2 и category3.

Я пытаюсь проверить функцию в views.py с указанными ниже кодами

def user_check(request):
    if not request.user.category1:
        if request.user.category2:
            return redirect('/category2')
        elif request.user.category3:
            return redirect('/category3')

В настоящее время это не помогает мне с желаемым выводом. Просьба помочь мне с правильным решением по этому вопросу

Я не хочу, чтобы пользователи категории 1 могли просматривать страницы категории 2 и категории 3. он / она должен иметь возможность просматривать страницы, предназначенные для него / нее, только если он / она пытается пропустить поток и получить к нему доступ

Traceback

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/manager

Django Version: 2.2.5
Python Version: 3.7.1
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'intranet_app.apps.IntranetAppConfig',
 'intranet_app_agent.apps.IntranetAppAgentConfig',
 'intranet_app_supervisor.apps.IntranetAppSupervisorConfig',
 'intranet_app_manager.apps.IntranetAppManagerConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "C:\Users\sasank.sankaran\Desktop\web_project\intranet_venv\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\sasank.sankaran\Desktop\web_project\intranet_venv\lib\site-packages\django\core\handlers\base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\sasank.sankaran\Desktop\web_project\intranet_venv\lib\site-packages\django\core\handlers\base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\sasank.sankaran\Desktop\web_project\intranet_venv\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
  21.                 return view_func(request, *args, **kwargs)

File "C:\Users\sasank.sankaran\Desktop\web_project\intranet_venv\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
  20.             if test_func(request.user):

File "C:\Users\sasank.sankaran\Desktop\web_project\intranet_venv\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
  20.             if test_func(request.user):

File "C:\Users\sasank.sankaran\Desktop\web_project\intranet_venv\lib\site-packages\django\utils\functional.py" in inner
  257.         return func(self._wrapped, *args)

Exception Type: AttributeError at /manager
Exception Value: 'MyUser' object has no attribute 'user'
def category_check_to_block(user):
    return user.is_category2


@user_passes_test(category_check_to_block)
class MyUser(AbstractUser):
    name = models.CharField(max_length=100)
    email = models.EmailField(max_length=255, unique=True)
    supervisor = models.CharField(max_length=100)
    location = models.CharField(max_length=100)
    profile = models.CharField(max_length=100)
    team = models.CharField(max_length=100)
    lob = models.CharField(max_length=100)
    span = models.CharField(max_length=100)
    ojt_date = models.DateField()
    is_agent = models.BooleanField(default=True)
    is_supervisor = models.BooleanField(default=False)
    is_manager = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    def __str__(self):
        return self.email
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...