Вопрос

Я хочу ограничить доступ к конкретному 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, когда запрошены роли отчетности и обследования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top