Я сталкиваюсь с делом, по которому много исследовал, и до сих пор не могу найти решение.
Мне было поручено завершить реализацию ролей в приложении ASP.NET MVC 1.
Дело здесь против того, что обычно делается, когда дело доходит до разрешений в приложениях.
Давайте представим, что у нас есть две роли, Оператор и Менеджер, на 5-страничном веб-сайте. Имея пользователя, который наследует две роли, я хочу разрешить и запретить разрешение на просмотр страниц по следующей схеме:
Для страницы 1 роль «Оператор» позволяет пользователю просматривать, но роль «Менеджер» запрещает; в этом случае я хочу позволить пользователю с этими двумя ролями просматривать страницу;
На странице 2 роль «Оператор» запрещает пользователю просматривать, а роль «Диспетчер» также запрещает; это единственная ситуация, когда я действительно хочу отказать в роли, когда обе роли не позволяют пользователю просматривать страницу.
Таким образом, всякий раз, когда пользователь наследует несколько ролей, что должно определять, что он не может просматривать страницу, это полное запрещение (ему отказывают во всех его ролях) и всякий раз, когда у него есть роль, которая позволяет, даже если все его другие роли отрицают, он все равно сможет просматривать страницу.
Кто-нибудь знает, как это можно реализовать?
EDIT:
Ниже приведен лишь краткий обзор того, как выполняется Авторизация в нашем приложении, помимо того, что используется в карте сайта.
Вы можете видеть, что Правило ниже использует более одного профиля. Ситуация, которую я описал выше, должна работать с указанной реализацией ниже.
<Rules xmlns="urn:artemis.runtime.web.security">
<!-- RUNTIME -->
<Rule roles="*" resource="^Artemis\.Runtime\.Web\.FilesController\..*" permission="Allow" />
<!-- ABERTURA GERAL -->
<Rule roles="*" resource="^Tagus\.Logistics\.Web\.Controllers\..*" permission="Allow" />
<Rule roles="Gestor Cliente,DUN" resource="^Tagus\.Logistics\.Web\.Controllers\.PlanningVsEffectiveController\..*" permission="Deny" />
</Rules>