Существует ли простая общая реализация управления доступом на основе правил?

Я реализую контроль доступа к интранет-сайту. Это было бы легко, если бы в компании не было 200+ сотрудников и настраиваемых разрешений почти для каждого. Это безумие, я знаю, но я не могу это изменить.

Итак, я попытался найти общую реализацию, которая соответствовала бы моим потребностям, но не смог ее найти, поэтому решил сделать это сам. В конце концов, я нашел довольно общее решение, которое заставило меня подумать :, что кто-то, должно быть, сделал это раньше!

Я назвал это СТОП (Тема Задача Объект Разрешение )Контроль доступа. У меня есть следующее отношение:

.-------.    .-----------.    .-------.
| users |1---*| STOPRules |*---1| tasks |
`-------'     '-----------'     '-------'

Правило STOP имеет следующие атрибуты

STOPRule {
    Subject;
    Task;
    ObjectType;
    Permission;
    Relation;
}

Отношение объекта может быть :владельцем, создателем, редактором и т. д. Это поле не требуется для поддержки общих задач. Когда он есть, отношение между текущим пользователем и экземпляром объекта вычисляется делегатом. Затем текущее отношение сравнивается с требуемым отношением в правиле, чтобы разрешить или запретить доступ.

Дайте мне знать, если я недостаточно ясно выразился.

Возникают два вопроса:

  1. Существует ли реализация с открытым исходным кодом, подобная этой?

  2. Видите ли вы какие-либо проблемы, с которыми я столкнусь, следуя этому пути?

РЕДАКТИРОВАТЬ:Я пошел дальше и фактически начал реализовывать эту модель. Первая проблема заключалась в том, что мне нужна была связь между субъектом и объектом для поддержки любого варианта использования. Теперь я могу сохранить следующее правило:

Джон(субъект)может(разрешение)редактировать(задачу )порядок(объект )ЕСЛИ он создатель(отношение )порядка.

Ребята, не могли бы вы предоставить РЕАЛЬНЫЙ пример использования, который нельзя было бы выразить с помощью этой модели?

6
задан Saulo Vallory 23 May 2012 в 03:47
поделиться