Эта проблема не совсем новая; это в основном общая проблема авторизации и прав доступа/контроля.
Чтобы избежать необходимости моделировать и поддерживать полный график того, какие объекты могут иметь каждый пользователь, каждый из них может принимать решения (в зависимости от того, что делает ваше приложение) о том, как начать царить в мультипликативном масштабных факторов. Итак, во-первых: где пользователи получают свои права? Если каждый пользователь имеет индивидуально назначенные права, вы ставите значительную проблему управления ongoig тем, кто должен добавлять пользователей, изменять пользователей и т. Д.
Возможно, пользователи могут получить свои права от групп, в которых они входят. Теперь у вас есть масштабный фактор, который упрощает управление и упрощает понимание системы. Изменение группы изменяет эффективные права для всех пользователей, являющихся членами.
Теперь, как выглядят эти права? По-видимому, нецелесообразно назначать права на целевой объект по объектам. Таким образом, возможно, права следует рассматривать как набор абстрактных «карточек доступа». Объекты в системе могут быть помечены как требующие «синий» доступ для чтения, «красный» доступ для обновления и «черный» доступ для удаления. Эти абстрактные права могут быть организованы в какой-то топологии, так что наличие «черного» доступа означает, что вы неявно также имеете «красный» и «синий», или, может быть, все они не пересекаются; это зависит от вас и от того, как ваше приложение должно работать. (Заметим также, что вы можете захотеть рассмотреть такие типы объектов — столы, если вам нравится —, может потребоваться их собственное правило доступа, по крайней мере, для «создания».
Представляя точки сбора на графике, вы рисуете связанные актеры в система к объектам, на которых они действуют, вы можете справляться с проблемами масштаба и контролировать сложность авторизации. Однако это никогда не бывает легко, и часто это так, что воодушевленные желания клиентов приводят к чему-то, что никогда не будет работать и никогда не будет достигнуто то, что хочет клиент (думает, что она).
Язык реализации не имеет ничего общего с архитектурными решениями, которые вам необходимо принять.
Проблема на самом деле не контролирует доступ к базе данных, а также к контроллерам или методам. Проблема в том, что нам нужно контролировать доступ к определенным строкам определенных таблиц базы данных. – Ian
Да, это именно то, что обсуждается в моем ответе, метод контроля доступа к определенным строкам определенных таблиц базы данных. –