14446
Вопросы про Python для чайников. Cпам и троллинг неприемлем. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Правила группы: https://t.me/ru_python_beginners/1649981
ну это может иметь смысл рамках конкретного проекта, но надо понимать зачем именно мы хотим управлять централизованно
Читать полностью…
Согласен, изначально я так и хотел сделать для каждого объекта свой набор действий, но потом подумал, что, наверное, было бы хорошо реализовать подобное расширение
Читать полностью…
у кучи объектов просто не будет полного набора CRUD действий
Читать полностью…
Вообще я делаю библиотеку для управления политиками доступа с использованием моделей RBAC, ReBAC, ABAC на основе графовой БД
Если не вдаваться во все подробности задумки и архитектуры, то использование будет выглядеть примерно так
from enum import Flag, auto
from typing import Protocol
class ActionSet(Flag):
pass
# Общие действия над ресурсами
class CRUDActions(ActionSet):
READ = auto()
CREATE = auto()
UPDATE = auto()
DELETE = auto()
# Действия над конкретным ресурсом
class DocumentActions(CRUDActions):
SHARE = auto()
EXPORT = auto()
# Декларация политик
class DocumentPolicy(Policy):
roles = RolePermissions({
UserRole.VIEWER: CRUDActions.READ,
UserRole.EDITOR: CRUDActions.CREATE | CRUDActions.UPDATE | CRUDActions.DELETE,
UserRole.ADMIN: DocumentActions.SHARE | DocumentActions.EXPORT,
}, inherits=True)
@allow(DocumentActions.READ | DocumentActions.SHARE)
def can_view_or_share(self, subject): ...
@deny(DocumentActions.DELETE)
def protect_from_deletion(self, subject): ...
# Вызов где-то в интеракторе
if session.can(user, DocumentActions.READ, doc):
Если можно избежать, лучше не трогать метаклассы и использовать что-нибудь попроще. Например, сделать два отдельных енама и, если надо, использовать CRUDActions | ExtendedActions.
Нет, конечно) Дипломная работа очень масштабная, наследуемые энамы — лишь инструмент
Читать полностью…
Если всё-таки хочется так сделать, я бы почитал сначала про метаклассы, __prepare__ и почитал исходники EnumType в модуле enum
Является ли ExtendedActions.SHARE экземпляром CRUDActions? В твоей концепции?
Читать полностью…
Именно задание сделать Flag, чтобы он таким образом работал?
Весь смысл енама в том, что у него ограниченный набор элементов. Поэтому от енама с элементами нельзя наследоваться.
Можно сделать какую-то свою штуку, чтобы можно было, но чтобы тайпчекер не ругался не получится.
Может кто-нибудь изобретал уже наследуемый енам через метаклассы, например? Если делали что-то такое, скиньте пример, пожалуйста
Возможно ли это сделать, чтобы тайпчекер не ругался?
В целом библиотеки как решения? Или конкретно про действия?
Читать полностью…
я не понял как биндится что у "документа" только определнные действия есть
Читать полностью…
имело бы смысл сделать глобальный список вообще из всего, при этом конкретизированного
Читать полностью…
а ещё у объекта может быть несколько разных READ с разными полями
Читать полностью…
А что нужно из поведения? Есть какие-то примеры использования?
Читать полностью…
Может, лучше будет почитать исходники пакета enum34 (который бекпорт), они короче
В смысле эта штука и есть задача дипломной работы? Или это нужно только в качестве инструмента для какой-то фичи?
Читать полностью…
Я взялся библиотеку писать в рамках дипломной работы в ВУЗе
Мне нужно сделать что-то такое
class ActionSet(Flag):Читать полностью…
pass
class CRUDActions(AxtionSet):
READ = auto()
CREATE = auto()
UPDATE = auto()
DELETE = auto()
class ExtendedActions(CRUDActions):
SHARE = auto()
EXPORT = auto()
Подкласс enum.Enum можно наследовать, если в нём нет элементов
Shhh... quiet now.
Muted xd for 1 day.
Reason:
такое рандомным людям не говорят