Проверка подлинности с помощью форм ASP.NET - несколько учетных записей

Я уверен, что варианты этого вопроса задавались много раз раньше, но я не могу найти ответ.

У меня есть веб-сайт, представляющий собой интернет-магазин. У нас есть следующие требования к входу в систему / управлению учетной записью:

Члены роли администратора для входа в / Admin Члены роли Pro для входа в / Pro У участников роли клиента нет определенной области, в которую они входят, но при оформлении заказа мы хотим, чтобы они могли входить в систему, чтобы они не Не нужно снова заполнять данные о доставке.

Поэтому мы хотели бы, чтобы структура url была примерно такой:

/Checkout.aspx (/ форма входа) /Admin/Login.aspx /Pro/Login.aspx (единственное небольшое исключение здесь состоит в том, что мы действительно хотим, чтобы пользователи могли получить доступ к странице /Pro/Register.aspx без входа в систему в - по понятным причинам)

Я читал, что это возможно, если я удалю конфигурацию аутентификации из основного файла web.config и создам файл web.config в каждой из папок pro и admin. В IIS 7 я изменил папки на приложения, но затем страницы не смогли получить доступ к мастер-страницам с основного сайта.

Правильно ли я поступаю?

Заранее спасибо.

Al


person higgsy    schedule 22.06.2011    source источник


Ответы (2)


Я не знаю, зачем вам нужно менять папки на приложения, но ваша стратегия создания «дополнительных» файлов web.config в каждом дочернем каталоге - один из правильных способов добиться этого.

Другой способ - объявить разрешения в корневом файле web.config для каждой страницы или каталога, как в примере ниже (из здесь):

<configuration>
    <system.web>
        <authentication mode="Forms" >
            <forms loginUrl="login.aspx" name=".ASPNETAUTH" protection="None" path="/" timeout="20" >
            </forms>
        </authentication>
<!-- This section denies access to all files in this application except for those that you have not explicitly specified by using another setting. -->
        <authorization>
            <deny users="?" /> 
        </authorization>
    </system.web>
<!-- This section gives the unauthenticated user access to the Default1.aspx page only. It is located in the same folder as this configuration file. -->
        <location path="default1.aspx">
        <system.web>
        <authorization>
            <allow users ="*" />
        </authorization>
        </system.web>
        </location>
<!-- This section gives the unauthenticated user access to all of the files that are stored in the Subdir1 folder.  -->
        <location path="subdir1">
        <system.web>
        <authorization>
            <allow users ="*" />
        </authorization>
        </system.web>
        </location>
</configuration>
person Widor    schedule 22.06.2011
comment
Привет, Видор, спасибо за ответ. Я не уверен, однако, как этот пример сообщает ASP.NET, что кто-то, имеющий доступ к /Pro/SecuredPage.aspx, должен быть перенаправлен на /Pro/Login.aspx, или, действительно, тот факт, что только члены роли Professional должны иметь возможность входить в систему в /Pro/Login.aspx - я что-то не понимаю? - person higgsy; 22.06.2011
comment
Теперь я понимаю, что вы хотите, но пока кто-нибудь не войдет в систему, как вы узнаете, к какой роли он принадлежит ?! Возможно, вы захотите посмотреть msdn. microsoft.com/en-us/library/ и вместо этого обрабатывать вход для конкретной страницы в код программной части? - person Widor; 22.06.2011
comment
Привет, Widor - это правда, но если, например, стандартный клиент входит в раздел / Pro /, вполне допустимо отобразить сообщение о том, что у него нет доступа к этому каталогу. - person higgsy; 22.06.2011

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

person Andy Hopper    schedule 22.06.2011
comment
Привет, Энди - это то, что я подумал, но когда я помещаю web.config в подпапку, я получаю сообщение об ошибке: использование раздела, зарегистрированного как allowDefinition = 'MachineToApplication' за пределами уровня приложения, является ошибкой. Эта ошибка может быть вызвана тем, что виртуальный каталог не настроен как приложение в IIS. - person higgsy; 22.06.2011
comment
Ах. Правильный; вы захотите удалить практически все, кроме элементов авторизации: ‹configuration› ‹system.web› ‹authorization› ‹allow roles = Admin /› ‹! - Или Pro -› ‹/authorization› ‹/system.web ›‹/Configuration› - person Andy Hopper; 22.06.2011