login: str
role_name: str
can_add: bool
can_edit: bool
can_delete: bool
additional_permissions: dict = None
def __post_init__(self):
if self.additional_permissions is None:
self.additional_permissions = {}
def __getattr__(self, item):
if item in self.additional_permissions:
return self.additional_permissions[item]
raise AttributeError(f"'User' object has no attribute '{item}'")
print(user_permissions) #{'role_name': 'user', 'can_add': 0, 'can_edit': 1, 'can_delete': 1, 'can_search': 0}
user = User(user_id=login_window.user_id, login=db_handler.get_login_by_user_id(login_window.user_id),
**user_permissions,
)
я хочу немного расширить БД с функциями для разных ролей юзеров, и у меня в БД гарантируется, что первые 4 всегда - role_name, can_add, can_edit, can_delete + некоторое количество дополнительных функций >= 0. Есть какой-то другой вариант, кроме как руками прописать can_xx = <значение из user_permissions> и остаток передать в additional_permissions ?
Алсо я рассматривал пермишны не как словарь а как сет: вместо {can_add': 0, 'can_edit': 1, 'can_delete': 1, 'can_search': 0} сделать так {'can_edit', 'can_delete'}
Обсуждают сегодня