У меня есть существующая база данных сообщества, и мне нравится использовать Umbraco для моего уровня представления. Как я могу реализовать вход/выход из системы с помощью проверки подлинности через .Net? (Я не хочу использовать функцию Member). У меня разные пользователи, которые получают доступ к разным типам страниц. Как я могу это контролировать? Пользовательский контроль?
Аутентификация umbraco
Ответ 1
Umbraco использует модель участника/роль поставщика ASP.NET для своей системы членства, и это довольно простой шаг, чтобы поменять значение по умолчанию для вашей собственной реализации. В прошлом я делал это, когда хотел аутентифицировать пользователей в хранилище Active Directory, но я не могу себе представить, что было намного сложнее аутентифицироваться против пользовательской базы данных.
Преимущество этого в том, что вы получаете полную интеграцию с системой членства в Umbraco и, используя собственный поставщик роликов, редакторы смогут ограничивать страницы, используя встроенные средства редактирования страниц, в отличие от того, что вам нужно подключить собственные средства контроля безопасности.
Вы должны создать простой поставщик членства, расширив класс UmbracoMembershipProvider и переопределив метод ValidateUser. Я не делал этого сам, но я знаю других, которые имеют.
Чтобы выполнить аутентификацию с помощью настраиваемого поставщика роли, вам необходимо создать класс, полученный из RoleProvider. Методы, которые вам интересны в переопределении, - IsUserInRole, FindUsersInRole, GetAllRoles и GetRolesForUser.
Здесь ссылка на сообщение блога Скотта Гатри в котором содержится дополнительная информация об API-интерфейсе поставщика, чем вам когда-либо понадобится знать, в том числе исходный код для поставщиков по умолчанию.
Ответ 2
Я использовал два подхода на своих сайтах umbraco. Оба подхода включают пользовательские элементы управления для входа и выхода из системы, которые отвечают за аутентификацию пользователя с пользовательским решением и для очистки учетных данных соответственно. Я также добавляю для обоих подходов атрибут umbracoMembersOnly для любых типов документов, которые я хочу защитить.
В первом подходе у меня была каждая отдельная проверка шаблона, чтобы узнать, был ли пользователь ограничен доступом. Чтобы абстрагировать это, я создал класс siteuser с методом isMember или isLoggedIn, который был доступен для всего сайта и может быть вызван либо из XSLT, либо из макроса User Control. Преимущество такого подхода заключается в том, что я мог настраивать пользовательские сообщения для каждого шаблона, а не просто предоставлять страницу с отказом на доступ.
Второй подход - тот, который я предпочитаю сейчас - если создать макрос разрешений, который отвечает за проверку права пользователя на доступ к любой странице (т.е. проверяет атрибут umbracoMembersOnly и, если true, проверяет переменную сеанса). Этот макрос включается в основной шаблон и поэтому выполняется на каждом шаблоне. Если у пользователя нет разрешения на доступ к текущей странице, я перенаправляюсь на ту же страницу, но с параметром? Alttemplate = RestrictedPage или аналогичным, добавленным к строке запроса. (Убедитесь, что ваш макрос Permissions проверяет alttemplate = RestrictedPage в строке запроса, или вы попадете в бесконечный цикл перенаправления.)
Ответ 3
Вы можете проверить http://osMemberControls.codeplex.com