простой файл web.config вопрос asp.net - PullRequest
0 голосов
/ 23 августа 2011

я использую проверку подлинности Windows с моим приложением asp.net

разные пользователи будут иметь разный доступ к частям сайта.

я хотел бы сделать что-то подобное в файле конфигурации:

    <appSettings>
     <role1>
<user>agordon</user><user>jsmith</user>
     </role1>
<role2><user>dtodd</user><user>kveel</user></role2>
    </appSettings>

это возможно сделать?

при аутентификации я бы тогда получил имя пользователя, подобное этому:

string username = HttpContext.Current.User.Identity.Name.ToString();

и проверил, существует ли этот пользователь вконкретная роль

Ответы [ 2 ]

2 голосов
/ 23 августа 2011

Используйте элемент <authorization>:

<configuration>
   <system.web>
      <authorization>
         <allow users="*" />
         <deny users="?"/>
      </authorization>
   </system.web>
</configuration>

Затем вы можете изменить это для определенных частей вашего сайта:

<location path="Pages/Administration">
       <system.web>
          <authorization>
             <deny roles="*"/>
             <allow roles="Admin" />
          </authorization>
       </system.web>
</location>
0 голосов
/ 23 августа 2011

Вы можете сделать это, но на самом деле это не лучший способ.

Проблема здесь в том, что appSettings не контролируются схемой Web.Config, поэтому вам нужнопрограммно перечислим appSettings ужасным образом:

if (configurationSettings.HasKey("Role1")) { ... }
else if (configurationSettings.HasKey("Role2")) { ... }
else if (configurationSettings.HasKey("Role3")) { ... }
//continue ad.nauseum; it's not fun - trust me!

Я знаю, что это не то, что вы спрашиваете, но если вы используете обычные веб-формы ASP.Net, то это немного сложная работа;на каждой странице / элементе управления вам нужно найти текущего пользователя, а затем определить, есть ли у этого пользователя доступ, а затем перенаправить или продолжить.

Если вы используете ASP.Net MVC, это намного чище, поскольку вы делаете это сАтрибуты.

Authorize(Roles = "Managers")]
public ActionResult CompanySecrets()
{
    return View();
}

То, что делает там код, говорит, что если у пользователя нет роли Менеджеров, не предоставляйте ему доступ.

Чтобы привести противоположный пример,Вот аналогичный метод с использованием веб-формы (пример msdn):

http://support.microsoft.com/kb/311495

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