2009-10-15 13 views
0

Я пытаюсь создать веб-сайт ASP.NET 3.5, который позволяет пользователям входить в систему и просматривать несколько страниц. Я хотел бы ограничить некоторые пользователи возможностью просмотра определенных страниц, но у меня возникли проблемы с созданием настраиваемой и гибкой системы. Я видел версию MS, но это не то, что я ищу. Может ли кто-нибудь направить меня на некоторые хорошие онлайн-статьи или даже видео-учебник, чтобы я мог продолжить исследования. Благодаря!Элементы управления доступом ASP.NET

P.S. Я попытался создать класс, который наследует System.Web.UI.Page, который делает некоторую проверку, но он становится беспорядочным. Все мои другие страницы наследуются от этой общей страницы. Это обычная практика? Как вы, ребята, решили эту проблему раньше?

+2

Можете ли вы объяснить, как версия MSFT недостаточно для ваших нужд? Это поможет нам понять, что вы ищете. –

+0

Я все еще очень новичок в ASP.NET, поэтому не был уверен, могут ли классы членства, роли и т. Д. Работать с тем, что у меня есть. Я беру на себя проект с уже существующей таблицей пользователей и ролей, и мне нужно создать систему, в которой администратор может создавать новые роли и назначать их определенным пользователям. Наконец, некоторым пользователям необходимо ограничить не только страницы, но и определенные элементы внутри страницы (I.E. GridView данных). Например: 'if user == admin показать номера счетов еще ничего не показывать.' –

ответ

1

Лучший способ реализовать это будет: Аутентификация форм в сочетании с поставщиком пользовательских ролей.

Надеюсь, что для проверки подлинности форм вам не обязательно использовать полную базу данных, которую MS использует для аутентификации.

Вы можете просто создать свою собственную базу данных и самостоятельно проверить пользователя и просто настроить cookie.

String UserName = "CoolGuy"; 
Boolean isValidUser = YourClass.YourMethod(UserName); 
if (isValidUser) 
{ FormsAuthentication.setAuthCookie(UserName, false); } 

Это будет аутентифицировать пользователя «CoolGuy» для сессии, при условии, YourMethod возвращает истину.

Вы можете использовать это в сочетании с поставщиком пользовательских ролей. Это дает вам возможность проверить User.IsInRole («Роль»); в вашем коде.

начать с CustomRoleProvider .. вот хорошая ссылка ... http://davidhayden.com/blog/dave/archive/2007/10/17/CreateCustomRoleProviderASPNETRolePermissionsSecurity.aspx

  • Раджа
+0

Спасибо Радже. Вы знаете, как перенаправить пользователя на страницу, отличную от страницы по умолчанию, после успешного входа в систему? Я использовал Response.Redirect, но я видел метод FormsAuthentication.RedirectFromLoginPage. Например, после того, как пользователь выполнил вход на страницу Default.aspx, я хочу включить их в Orders.aspx. –

+0

Если страница перенаправления будет одинаковой. Удобный способ - использовать Response.Redirect() .... Это должно быть после установки Cookie для проверки подлинности форм. –

+0

Включение пользователя обычно запрашивает защищенную страницу напрямую (например, asd.aspx) ... Поскольку страница защищена, она перенаправляется на страницу входа ... После успешного входа в систему, если вы хотите вернуть пользователя asd.aspx ... вам нужно использовать метод FormsAuthentication.RedirectFromLoginPage(). –

1

Ну, не зная точную информацию о вашем приложении, вы можете использовать только Role Manager, встроенный в API-интерфейс членства.

В принципе, вы должны создавать роли для каждой страницы и назначать пользователям роли (страницы), которые вы хотели бы просмотреть.

В коде позади каждой страницы, на мероприятии On_Load, я бы просто вызвать метод

if(Roles.IsUserInRole(rolePageName)) 
{ 
    //Continue page loading logic 
} 
{ 
    //Redirect or transfer the user elsewhere 
} 

Для такого рода логики вы можете захотеть пересмотреть, используя унаследованную страницу, иначе вы собираетесь чтобы получить способ получить URL-адрес страницы и передать ее в какой-то длинный список операторов if-else или switch, чтобы вызвать правильный метод Roles.IsUserInRole.

Смежные вопросы