Недавно задался целью реализовать элегантный способ для управления правами доступа абстрактных объектов системы, о чем и хочу рассказать в этом тексте. В частности данный функционал понадобился для работы cubelibre.ru, поэтому опишу суть проблемы на конкретном примере. Практически любое приложение в наше время имеет ряд сущностей, которые необходимо контролировать, а именно устанавливать какие то правила, согласно которым должно регулироваться поведение сущности в системе. Простейшим примером будет такая сущность как пользователь. Существуют разные действия, которые пользователи могут совершить в системе. В cubelibre.ru например, есть группа пользователей "читатели" которые могут приобретать рассказы, увеличивать как рейтинг рассказа так и рейтинг других пользователей системы, а так же оставлять комментарии к рассказам при этом список возможностей постоянно расширяется. Приятно иметь средство управления возможностями пользователей, например кому то запретить написание комментариев к рассказам. Помимо этого рассказы сами по себе так же являются сущностями которыми хорошо бы управлять, то есть, например указать что для данного рассказа не может быть оставлен комментарий или автор больше не может изменять какие то поля рассказа. Для реализации подобного функционала хотелось бы иметь универсальное решение, которое при этом было бы очень простым и понятным.
Далее