Я реализую контроль доступа к интранет-сайту. Это было бы легко, если бы в компании не было 200+ сотрудников и настраиваемых разрешений почти для каждого. Это безумие, я знаю, но я не могу это изменить.
Итак, я попытался найти общую реализацию, которая соответствовала бы моим потребностям, но не смог ее найти, поэтому решил сделать это сам. В конце концов, я нашел довольно общее решение, которое заставило меня подумать :, что кто-то, должно быть, сделал это раньше!
Я назвал это СТОП (Тема Задача Объект Разрешение )Контроль доступа. У меня есть следующее отношение:
.-------. .-----------. .-------.
| users |1---*| STOPRules |*---1| tasks |
`-------' '-----------' '-------'
Правило STOP имеет следующие атрибуты
STOPRule {
Subject;
Task;
ObjectType;
Permission;
Relation;
}
Отношение объекта может быть :владельцем, создателем, редактором и т. д. Это поле не требуется для поддержки общих задач. Когда он есть, отношение между текущим пользователем и экземпляром объекта вычисляется делегатом. Затем текущее отношение сравнивается с требуемым отношением в правиле, чтобы разрешить или запретить доступ.
Дайте мне знать, если я недостаточно ясно выразился.
Возникают два вопроса:
Существует ли реализация с открытым исходным кодом, подобная этой?
Видите ли вы какие-либо проблемы, с которыми я столкнусь, следуя этому пути?
РЕДАКТИРОВАТЬ:Я пошел дальше и фактически начал реализовывать эту модель. Первая проблема заключалась в том, что мне нужна была связь между субъектом и объектом для поддержки любого варианта использования. Теперь я могу сохранить следующее правило:
Джон(субъект)может(разрешение)редактировать(задачу )порядок(объект )ЕСЛИ он создатель(отношение )порядка.
Ребята, не могли бы вы предоставить РЕАЛЬНЫЙ пример использования, который нельзя было бы выразить с помощью этой модели?