Ответ
Авторизация — это процесс определения и предоставления прав доступа к ресурсам. Она отвечает на вопрос "Что разрешено делать этому пользователю?" и всегда следует за аутентификацией, которая отвечает на вопрос "Кто этот пользователь?".
Ключевое различие:
- Аутентификация (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) Ответ 18+ 🔞
А, слушай, вот это тема, про которую все так любят пиздеть, но половина нихуя не отличает одно от другого. Авторизация, блядь. Это когда ты уже влез в систему, типа доказал, что ты — это ты (это аутентификация, ёпта), а теперь система тебе говорит: «Ну окей, ты Вася, а что тебе, Васе, можно-то, блядь?»
Ключевое различие, чтобы не быть мудаком:
- Аутентификация: «Кто ты такой, сука?» — «Я Вася!» — «Докажи!» — показывает паспорт (логин/пароль). Впустили.
- Авторизация: «А, Вася. Ну заходи. Но в шкаф с оружием тебе, Вася, нихуя нельзя. А на кухню — пожалуйста, жри пельмени». Вот это и есть проверка прав.
Как это обычно устроено, блядь:
- RBAC (Ролевой доступ): Самый простой, как три копейки. Ты не «Вася», ты «админ», «модератор» или «пиздюк обычный». И в зависимости от этого тебе открывают двери. Популярно, потому что мозги не ебёт.
- ABAC (На основе атрибутов): Вот тут уже веселее. Тут смотрят не только кто ты, но и что ты, где ты и какое сейчас время. «Вася, ты можешь зайти в этот раздел, но только если ты из офиса и сейчас рабочий день, а не в три часа ночи из Таиланда». Хуйня мощная, но и мозг выносит конкретно.
Вот смотри, как на 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)
Вот и вся магия, ёпта. Навесил декоратор @requires_role('admin') на функцию — и теперь её вызовет только тот, у кого в ролях есть этот самый «admin». А если попробует какой-нибудь «пользователь» — получит по ебалу с PermissionError. Красота, в рот меня чих-пых! Главное — не перепутай, где кого проверяешь, а то получится пиздец, а не безопасность.