Базовый поставщик ролей ASP.NET имеет плоскую структуру, поэтому пользователю необходимо принадлежать ко всем ролям, в которых он участвует.
Вам нужно найти / написать поставщика ролей , который поддерживает иерархии - я бы рекомендовал этот маршрут из-за чего-то совершенно другого, поскольку вы получите от него некоторые преимущества, такие как другие аспекты платформы, которые работать с этими провайдерами (контроль входа в систему, настройки конфигурации для авторизации / доступа и т. д.).
На самом деле вы хотите что-то вроде:
- Роль пользователя - может публиковать сообщения на форуме, может редактировать свои собственные сообщения.
- Роль редактора - может делать все, что может пользователь, и может редактировать другие сообщения.
- Роль администратора - может делать все, что может редактор, и другие административные функции.
То есть, если пользователь находится в роли редактора, ему автоматически предоставляются права пользователя и т. Д.
Тогда вы можете выбрать:
- Дублируйте эти роли для каждого форума, назначайте им пользователей и т. Д.
- Добавьте несколько свойств в свои профили пользователей, скажем "ForumEdit" и "ForumAdmin", и сохраните список форумов, которые они могут редактировать / администрировать там.
Преимущество (1) состоит в том, что вам нужно сделать только одну проверку, чтобы увидеть, может ли пользователь выполнять задачи администрирования / редактирования, но у вас больше затрат на управление всеми этими ролями.
Преимущество (2) состоит в том, что ролями легко управлять, вы можете удалить пользователя из группы редакторов, и он, например, потеряет все права редактора, но у вас есть более высокая стоимость, чтобы определить, являются ли они на самом деле редактор для этого форума, так как вам нужно запросить их профиль.
Подобный ответ на этот здесь действительно .