Ответ
Авторизация — это процесс определения и предоставления прав доступа к ресурсам. Она отвечает на вопрос "Что разрешено делать этому пользователю?" и всегда следует за аутентификацией, которая отвечает на вопрос "Кто этот пользователь?".
Ключевое различие:
- Аутентификация (Authentication): Проверка личности. Вы вводите логин и пароль, система подтверждает, что вы — это вы.
- Авторизация (Authorization): Проверка прав. После входа система определяет, можете ли вы, например, удалять посты или только просматривать их.
Распространенные модели авторизации:
- RBAC (Role-Based Access Control): Доступ определяется на основе ролей (
администратор,модератор,пользователь). Это самая популярная модель из-за своей простоты. - ABAC (Attribute-Based Access Control): Доступ определяется на основе атрибутов пользователя, ресурса и окружения (например, разрешить доступ только в рабочее время).
Пример реализации в Python с помощью декоратора:
from functools import wraps
# Упрощенная модель пользователя
class User:
def __init__(self, username, roles):
self.username = username
self.roles = roles
# Предположим, это функция, получающая текущего пользователя
def get_current_user():
# В реальном приложении здесь будет логика извлечения пользователя из сессии или токена
return User(username='admin_user', roles=['admin', 'editor'])
def requires_role(required_role):
"""Декоратор для проверки, есть ли у пользователя нужная роль."""
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
current_user = get_current_user()
if required_role not in current_user.roles:
# В веб-приложении здесь был бы возврат HTTP 403 Forbidden
raise PermissionError(f"Доступ запрещен. Требуется роль: {required_role}")
return func(*args, **kwargs)
return wrapper
return decorator
@requires_role('admin')
def delete_sensitive_data():
print("Конфиденциальные данные успешно удалены.")
# Вызов функции
try:
delete_sensitive_data()
except PermissionError as e:
print(e)