2012-07-02 2 views
0

Я хотел бы управлять контролем доступа моих пользователей и разрешать каждой роли разные страницы на веб-сайте. Каждый пользователь может также иметь разные строки.Контроль доступа в asp.NET

Я хотел бы знать, что является лучшим способом справиться с этим контролем доступа. Однако у меня есть эти ограничения. Роли создаются в базе данных Oracle, которую я использую, и я не должен использовать ASPNETDB в APP_DATA для управления ролями.

Моя первоначальная идея заключалась в том, чтобы упростить доступ пользователя и создать сеанс, чтобы указать, является ли он администратором, пользователем или и тем, и другим. Тем не менее, мне все еще нужно было понять, как скрыть/показать пункты меню соответственно. Я не исходил из этой идеи, потому что считаю, что asp.NET 4.0 будет иметь что-то готовое для этого использования.

Обновление: Я использую Web Forms

Update # 2: Я не использую форму входа. Я извлекаю имя пользователя Windows для зарегистрированного пользователя и сравниваю его с доступом к этому имени пользователя в базе данных. Механизм аутентификации является ручным, просто нужно выяснить, как различать роли и как отображать разные меню.

+0

WebForms или MVC? –

+0

@Marnix Веб-формы –

ответ

0

вы можете попробовать с отключением IPrincipal и IIdentity,

And use these method 

IsInRole("TestRole") 
0

Вы могли бы реализовать свои собственные пользовательские членства и ролей поставщиков. На самом деле это не так сложно.

Используйте Google для поиска «реализовать пользовательский поставщик членства», и вы найдете много статей, объясняющих, как это сделать. Тот, который я нашел довольно хороший:

How do I create a custom membership provider for ASP.NET MVC 2?

После того, как вы реализовали поставщиков и зарегистрировали их в web.config можно использовать обычные методы контроля доступа (авторизации в веб-конфигурации, IsInRole в CS код и т.д.).

+0

Я не использую MVC 2, он все еще применим? –

+0

Да. См. [Этот ответ] (http://stackoverflow.com/questions/9028897/difference-between-membership-provider-in-asp-net-webforms-and-mvc-3) – user1429080

0

Have посмотрите, как работает аутентификация форм в Asp.net, это не зависит от используемой вами технологии (webforms или mvc) и от источника данных, который вы используете для пользователей (может быть sql, xml или любого другого). В качестве примера, как только пользователь будет аутентифицирован против вашего источника данных (es: имя пользователя & пароль существует в таблице пользователя), вы назначаете объект IPrincipal User роли, которую вы хотите, и отмечаете ее как аутентифицированную. Эти значения затем сохраняются в файле cookie, показывая, как механизм аутентификации независим от источников данных приложения. Для получения дополнительной информации: http://www.eggheadcafe.com/tutorials/asp-net/009e2e5e-5a44-4050-8233-59a0d69844e8/basics-forms-authentication-in-aspnet-20.aspx

http://msdn.microsoft.com/en-us/library/aa480476.aspx

MembershipProvider in .NET for CAS Shibboleth

0

Не использовать сеанс для хранения такой информации, так как сессия и аутентификация не синхронизированы. Вы можете использовать сборку в поставщике членства Asp.Net или написать собственный код для создания cookie-аутентификации. Вот пример с cookie аутентификации. UserModel содержит дополнительную информацию (роли, имя пользователя) и будет храниться вместе с аутентификационным билетом в безопасной зашифрованной форме.

private void CreateAuthentificationTicet(UserModel user) 
{ 
    var serializedUser = JsonConvert.SerializeObject(user); 
    var ticket = new FormsAuthenticationTicket(1,    // version 
              user.Email, // user name 
              DateTime.Now, // create time 
              DateTime.Now.AddMinutes(30), // expire time 
              false,   // persistent 
              serializedUser);    // user data 

    var strEncryptedTicket = FormsAuthentication.Encrypt(ticket); 
    var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, strEncryptedTicket); 
    Response.Cookies.Add(cookie); 
} 
Смежные вопросы