Проверка подлинности ASP.NET для одновременного разрешения / запрета доступа к странице и показа / скрытия ссылки - PullRequest
3 голосов
/ 21 января 2012

Я ищу способ легко обернуть безопасность вокруг местоположения, в то же время используя это, чтобы показать / скрыть ссылки в моем меню.

Я знаю, как заблокировать местоположение для неавторизованных пользователей, например:

<location path="AdminDirectory">
    <system.web>
        <authorization>
            <allow roles="SomeRole"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

И я могу показать / скрыть ссылки с кодом, например:

myLink.Visible = User.IsInRole("SomeRole");

Но то, что я ищу, - это способ сделать так, чтобы имя роли SomeRole было настроено только один раз. Если бы я мог прочитать из элемента location и проверить его в коде, это было бы идеально, но я не вижу способа сделать это.

// Something like:
myLink.Visible = TestLocationAccess("AdminDirectory");

Я могу придумать действительно дурацкий способ сделать это с помощью вызова javascript / AJAX, чтобы «проверить» каталог от клиента и показать / скрыть ссылку с помощью javascript, но, очевидно, это не идеально.

Спасибо

Ответы [ 2 ]

4 голосов
/ 21 января 2012

Вы можете использовать метод CheckUrlAccessForPrincipal :

myLink.Visible = UrlAuthorizationModule
    .CheckUrlAccessForPrincipal("~/AdminDirectory", User, "GET");

Поскольку метод статический, вам, очевидно, необходимо передать в качестве второго аргумента экземпляр текущего IPrincipal.

2 голосов
/ 21 января 2012

Рассмотрите возможность использования Карта сайта ASP.Net В него встроены функции для отображения или скрытия ссылок на основе ролей

т. Е. В исходном xml для карты сайта можно определить роли, к которым относятся ссылки, т. Е.

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="default.aspx" title="Home">
        <siteMapNode url="admin.aspx" title="Admin" roles="Admin" />
        <siteMapNode url="user.aspx" title="User Page" roles="User" />
    </siteMapNode>
</siteMap>

Вы можете использовать роли для ограничения доступа в web.config и использовать те же роли для ограничения навигации по карте сайта.

Полагаю, вы все еще контролируете авторизацию в двух местах. Это то, что я бы сделал (сделал в прошлом). Не знаю, приведет ли это вас туда, куда вам нужно идти.

В любом случае, вот Скотт Гатри объясняет лучше, чем я могу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...