class BusinessError(Exception):
    """可以原样展示给用户的业务错误；field 指向出错的表单字段。"""

    def __init__(self, message: str, field: str | None = None):
        super().__init__(message)
        self.message = message
        self.field = field


class PermissionDenied(BusinessError):
    def __init__(self, message: str = "Permission denied."):
        super().__init__(message)
