Что нужно сделать
На вас возложили задачу по созданию и поддержке специализированного сайта-форума. Вы только начали выполнять задачу и сейчас остановились на реализации действий, которые могут совершать посетители форума. И конечно же, для разных пользователей прописаны разные возможности.
Напишите декоратор check_permission
, который проверяет, есть ли у пользователя доступ к вызываемой функции, и если нет, то выдаёт исключение PermissionError
.
Пример кода:
user_permissions = ['admin']
@check_permission('admin')
def delete_site():
print('Удаляем сайт')
@check_permission('user_1')
def add_comment():
print('Добавляем комментарий')
delete_site()
add_comment()
Результат:
Удаляем сайт
PermissionError: У пользователя недостаточно прав, чтобы выполнить функцию add_comment
Что оценивается
- Результат вычислений корректен.
- Формат вывода соответствует примеру.
- Переменные, функции и собственные методы классов имеют значащие имена, не
a
,b
,c
,d
. - Классы и методы/функции имеют прописанную документацию.
- Есть аннотация типов для методов/функций и их аргументов (кроме
args
иkwargs
). Если функция/метод ничего не возвращают, то используетсяNone
.
user_permissions = ['admin']
def check_permission(username: str):
'''Функция для передачи аргумента декоратору'''
def check_permission_decorator(function):
'''Декоратор для проверки доступа к вызываемой функции'''
def inner():
try:
if username not in user_permissions:
raise PermissionError(f'У пользователя недостаточно прав, чтобы выполнить функцию {function.__name__}')
else:
result = function()
return result
except PermissionError as exc:
print(f'PermissionError: {exc}')
return inner
return check_permission_decorator
@check_permission('admin')
def delete_site():
print('Удаляем сайт')
@check_permission('user_1')
def add_comment():
print('Добавляем комментарий')
delete_site()
add_comment()