Есть ли что-то, что мешает мне просто настраивать все членство, роли и профили без наследования от абстрактных классов, таких как MembershipProvider и т. Д .?
MSDN четко заявляет: «При реализации пользовательского поставщика ролей вы должны наследовать абстрактный класс RoleProvider». (http://msdn.microsoft.com/en-us/library/system.web.security.roleprovider.aspx)
Однако, пока я иду сюда, я обнаруживаю, что действительно настраиваю все это в соответствии с нашими конкретными потребностями, и во многих случаях я даже не реализую то, что унаследовано, а вместо этого иду своим собственным путь. Одним из примеров того, что я делаю, является метод «GetAllRoles». .NET хочет, чтобы я реализовал метод, который возвращает массив строк. Я считаю, что это не отвечает моим потребностям, так как «Роль» в нашем случае содержит гораздо больше информации, чем просто имя - у нас есть описания ролей на нескольких языках, например. Поэтому я пошел и создал свой собственный класс с именем ProjectRole, и мой метод GetAllRoles вернул List<ProjectRole>
. И затем на уровне представления я могу извлечь все данные из каждой ProjectRole с помощью простого цикла foreach.
Точно так же я не хочу возвращать MembershipUser для пользователей, а скорее ProjectUser, где я могу предоставить свои собственные поля.
Пока все работает нормально. Но я еще не закончил. Что я хочу знать, так это то, что я как-то облажался и просто еще не осознал этого? Для входа я делаю
if (ProjectMembershipProvider.ValidateUser(UsernameTextBox.Text, PasswordTextBox.Text == true)
{
FormsAuthentication.SetAuthCookie(UsernameTextBox.Text, true);
}
Если я не ошибаюсь, я даже не использую провайдеров ASP.NET на данном этапе, кроме как для наследования множества вещей, которые я заканчиваю тем, что добавляю теги [Obsolete]
, потому что я раскручиваю свои собственные методы. Однако меня беспокоит то, что, в конце концов, я все еще хочу иметь возможность использовать некоторые вещи, такие как User.Identity.IsAuthenticated
и User.Identity.Name
, и такие, чтобы отображать имя пользователя внутри, например "Welcome " + User.Identity.Name
. Будет ли это возможно, если я пойду по этому маршруту?
tl; dr --- Я как-то облажался, неправильно используя провайдеров, от которых я наследую, и просто еще не осознал этого?