ASP.NET Условная аутентификация Role URL -адреса ASP.NET
-
19-09-2019 - |
Вопрос
Я хочу ограничить доступ к конкретному URL -адресу, если пользователь не является членом 2 разных ролей. В этом случае я хочу предоставить доступ к этому URL -адресу, только если пользователь находится в обоих отчетах А ТАКЖЕ Архивирующая роль. Есть ли способ сделать это в ASP.NET?
<location path="testpage.aspx">
<system.web>
<authorization>
<allow roles="Reporting, Archiving"/>
<deny users="*"/>
</authorization>
</system.web>
Я хочу что -то вроде этого:
<location path="testpage.aspx">
<system.web>
<authorization>
<allow roles="Reporting & Archiving"/>
<deny users="*"/>
</authorization>
</system.web>
Решение
Это довольно уродливо, но вы можете унаследовать от поставщика ролей, которого вы в настоящее время используете (SQLroleprovider, WindowstokenRoleprovider, AuthorizationStoreRoleprovider), переопределяйте GetRolesForuser, вызовите базовую реализацию, чтобы получить роли и объединить их по мере необходимости. Затем, очевидно, поместите своего поставщика пользовательских ролей в свой Web.Config вu003CroleManager> Раздел конфигурации.
Вам нужно только переопределить один метод (и, возможно, getUsersInrole) и объединить его по мере необходимости.
public override string[] GetRolesForUser( string username ) {
List<string> roles = new List<string>( base.GetRolesForUser(username) );
if( roles.Contains("Reporting") && roles.Contains("Archiving") ) {
roles.Add("ReportingAndArchiving");
}
return roles.ToArray();
}
Другие советы
Вы можете создать функцию SQL, которая, учитывая конкретный идентификатор пользователя, URL -адрес страницы и список разрешенных ролей (XML), возвращает бит, указывающий, предоставляется ли доступ к этому URL -адресу, и впоследствии используйте его для установки флага, который определит, как бы Чтобы показать это как действительный выбор в меню JavaScript или DHTML или что -то в этом роде.
Вы можете внедрить поставщика пользовательских ролей. Анкет Затем вы можете определить новую «поддельную» ролевую отчетность и проверить, принадлежит ли пользователь к роли отчетности и архивирования внутри метода IsuserInrole, когда запрошены роли отчетности и обследования.