Как и любой другой декоратор работ -
Декоратор - это функция, которая получает функцию в качестве аргумента и возвращает другую функцию.
Возвращенная функция «займет место» из исходной функции.
Поскольку желаемый эффект с decoratos обычно позволяет запускать некоторый код до и после запуска исходной функции (декорируемой), декораторы создают новую функцию, которая принимает любое количество анонимных и именованных параметров (* префикс «args» и ** префикс «kwargs» отвечают за сохранение параметров в списке и словаре соответственно)
Внутри этой новой функции у вас есть место для написания вашего кода подтверждения, а затем он вызывает исходную функцию, которая в этом контексте называется «func», и возвращает свое первоначальное значение.
вызов decorator.decorator строго не нужен: он jsut изменяет некоторые ttrbitues функции-обёртки, так что он кажется более близким к исходному funciton (например, атрибуту 'func_name') - но код должен работать без это.
После определения декоратора вы должны применить его к функции или методу, который вы хотите декорировать: просто поместите @allowed_roles в строку, предшествующую определению функции, которую вы хотите декорировать.