App Right¶
For advanced application, a user can have specified access rights richer than just what permission would presume.
For instance in a web app, some clients could be allowed to see certain pages, but not others.
This is handled in ecodev_core via the AppRight class, in one to many
(not to be confused with one too many, usually late in a bar 😁) relationship with AppUser (meaning a user can have several rights. )
AppRight code¶
AppRight is a simple SQLModel descendant
from typing import Optional
from typing import TYPE_CHECKING
from sqlmodel import Field
from sqlmodel import Relationship
from sqlmodel import SQLModel
if TYPE_CHECKING: # pragma: no cover
from ecodev_core.app_user import AppUser
class AppRight(SQLModel, table=True): # type: ignore
"""
Simple right class: listing all app_services that a particular user can access to
"""
__tablename__ = 'app_right'
id: Optional[int] = Field(default=None, primary_key=True)
app_service: str
user_id: Optional[int] = Field(default=None, foreign_key='app_user.id')
user: Optional['AppUser'] = Relationship(back_populates='rights')
Here:
idis a self explanatory field, the primary key of theapp_righttable.app_serviceis the service granted to the associated user. It could be a web page, an action in a page, accessing a specific data source...user_iddefines the foreign key (which is theAppUserprimary key)useris a convenience offered bySQLModel, only available inside asession. More on the relationship fields here
AppRight creations¶
As of 2024/01, we mainly setup app rights manually in a pgadmin interface, but we hope
to add a generic page in ecodev-app to allow for a simple process to add rights.
AppRight uses¶
We usually use the get_app_services method
get_app_services¶
Feeding get_app_services with a AppUser and a session returns the list of app_services the user has access to
from sqlmodel import Session
from ecodev_core import engine
from ecodev_core import select_user
from ecodev_core import get_app_services
with Session(engine) as session:
admin_services = get_app_services(select_user('admin', session), session)
More on select_user here.
We then use these services to grant or deny access to a specific web page, or to filter on a column of a table. We are confident you can put AppRight to some use!