flask_more_smorest.perms.model_mixins
Reusable mixins for User models and other models in Flask-More-Smorest.
Classes
Adds user_id foreign key and user relationship to a model. |
|
Adds profile fields: first_name, last_name, display_name, avatar_url. |
|
Soft delete with deleted_at timestamp and helper methods. |
|
Adds authentication-related timestamps: last_login_at, email_verified_at. |
|
User-owned resources with configurable permission delegation. |
- class flask_more_smorest.perms.model_mixins.HasUserMixin[source]
Adds user_id foreign key and user relationship to a model.
- Configuration:
__user_field_name__: Custom alias for user_id (default: “user_id”)__user_relationship_name__: Custom alias for user (default: “user”)__user_id_nullable__: Allow NULL owner IDs (default: False)__user_backref_name__: Custom backref on User modelNone(default): Auto-generate as{tablename}s(e.g., “articles”)Custom string: Use specified name
"": Skip backref creation
Example
>>> class Article(BasePermsModel, HasUserMixin): ... __user_backref_name__ = "written_articles" ... title: Mapped[str] = mapped_column(sa.String(200)) >>> user.written_articles # Custom backref
- classmethod __init_subclass__(**kwargs)[source]
Configure user field and relationship aliases on subclass creation.
- user_id = <sqlalchemy.orm.properties.MappedColumn object>
- user
Relationship to the registered User model.
Uses lazy resolution via lambda to support custom User models registered through init_fms(). The lambda is evaluated during mapper configuration, allowing get_user_model() to return the correct registered User class.
- class flask_more_smorest.perms.model_mixins.UserOwnershipMixin[source]
User-owned resources with configurable permission delegation.
Two modes:
Simple Ownership (default,
__delegate_to_user__ = False): - Comparesuser_id == current_user.id- Use for: Notes, posts, commentsDelegated Permissions (
__delegate_to_user__ = True): - Callsself.user._can_write(current_user)- Use for: Tokens, settings, API keys
- __delegate_to_user__
Delegate to user’s permission methods (default: False)
- __user_id_nullable__
Allow NULL owner IDs (default: False)
Example
>>> class Token(UserOwnershipMixin, BasePermsModel): ... __delegate_to_user__ = True ... token: Mapped[str] = mapped_column(sa.String(500)) >>> # Delegates to user's permission methods
- class flask_more_smorest.perms.model_mixins.TimestampMixin[source]
Adds authentication-related timestamps: last_login_at, email_verified_at.
- class flask_more_smorest.perms.model_mixins.ProfileMixin[source]
Adds profile fields: first_name, last_name, display_name, avatar_url.
Property:
full_namereturns combined first/last name.- property full_name: str
Get formatted full name.
- Returns:
Full name as “first last”, or just first or last if one is missing
- class flask_more_smorest.perms.model_mixins.SoftDeleteMixin[source]
Soft delete with deleted_at timestamp and helper methods.
Methods:
soft_delete()marks as deleted,restore()clears. Property:is_deletedreturns True if deleted_at is not None.- property is_deleted: bool
Check if record is soft deleted.
- Returns:
True if record has been soft deleted