Это на самом деле очень широкий вопрос. Предполагая, что у вас есть четкое разделение между уровнями приложений (например, с помощью MVC), это то, что происходит на бизнес-уровне.
Принимая ваши прямые требования, это может быть довольно просто. В вашей таблице пользователей есть hasEdit, hasView и т. Д. Для каждого элемента прикрепите к нему идентификатор пользователя, представляющий создателя. На бизнес-уровне правило заключается в том, что у них есть разрешение на редактирование, если они являются создателем или имеют hasEdit = true.
Поднимите это на ступеньку выше, если у вас есть разные типы, а разрешение hasEdit равно для типа , для этого вам понадобится другая сущность.
userPermission
- userPermissionId
- userId (FK)
- typeId (FK)
- hasEdit (логическое значение)
- hasView
- и т. Д.
Чтобы узнать, есть ли у них разрешение на редактирование, вы проверяете, являются ли они владельцем, или ищите этот тип элементов и текущего пользователя в таблице userPermission, и проверяете hasEdit. Вы можете создать дополнительные правила, например, поместить глобальный hasEdit в пользовательскую таблицу. Или представляющий глобальный hasEdit записью в userPermissionId с нулевым typeId.
Это может стать более сложным, с использованием ролей и переменного количества разрешений ... все это сводится к вашим требованиям. Вам нужно тщательно определить свои бизнес-требования (придумать кучу вариантов использования), и тогда вы сможете разрабатывать оттуда. Таким образом, на самом деле информации недостаточно для того, чтобы придумать ее больше, чем я изложил здесь (и даже это, вероятно, не совсем то, что вам нужно).