Существует ли способ перечислить, какие роли имеют доступ к данной странице с помощью кода?
Пример, у меня есть Testpage.aspx, и я хотел перечислить роли, допускал эту страницу, когда пользователь получает доступ к странице. URLAuthorizationManager должен смочь узнать это так или иначе, таким образом, должен быть способ, которым он знает, какие роли настроены в webconfig для страницы. или URL.
Вот webconfig, ограничение ролей позволило просматривать эту страницу.
<location path="Testpage.aspx">
<system.web>
<authorization>
<allow roles ="admin,sales" />
</authorization>
</system.web>
</location>
Если бы я мог бы найти решение, оно возвратило бы "администратора", "продажи". Кто-либо знает, как я могу сделать это?Спасибо
Вы можете использовать следующий код на странице, где вы хотите получить информацию.
var section = (AuthorizationSection)
WebConfigurationManager.GetSection("system.web/authorization");
var rules = section.Rules;
var allowedRoles = rules
.OfType<AuthorizationRule>()
.Where(r => r.Action == AuthorizationRuleAction.Allow)
.Select(r => r.Roles).First();
Причина вызова First()
заключается в том, что конфигурация .NET является иерархической. Предположим, у вас есть следующая иерархия и конфигурация веб-сайта:
/Default.aspx
/Web.config (<allow roles="admin,user" />)
/SubDir/
/Test.aspx
/Web.config (<allow roles="admin,other" />)
, и вы вызываете приведенный выше код из Test.aspx.cs
, затем свойства AuthorizationSection.Rules
содержит три элемента, соответствующих соответственно конфигурации из /SubDir/Web.config
, Web.config
и machine.config
. Таким образом, первый элемент содержит роли admin
и other
.
Используйте метод Roles.GetAllRoles()
http://msdn.microsoft.com/en-us/library/system.web.security.roles.getallroles.aspx
и вот пример, где они перечисляют все роли: http://weblogs.asp.net/scottgu/archive/2005/10/18/427754.aspx