Страница 1 из 1

Модуль авторизации ("для своих")

СообщениеДобавлено: 10 окт 2012, 15:46
olga_work6
Здравствуйте, вопрос по модулю авторизации.

Поставленная задача: сделать на сайте раздел "для своих", куда можно попасть по паролю.
Ссылку Log in разместить стандартно, в верхнем правом углу. При нажатии - ввод пароля и переход в закрытый раздел.


1. Если я правильно поняла, модуль один и для входа в админскую панель и для доступа зарегистрированных пользователей к закрытымм разделам сайта ?
2. Как "встроить" модуль в шаблон сайта ? Чтобы форма авторизации появлялась на страничке сайта.
3. Если есть другие, бесплатные варианты модуля авторизации, посоветуйте.

Re: Модуль авторизации ("для своих")

СообщениеДобавлено: 10 окт 2012, 20:38
cmsservice
Сначала посмотрите сюда
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку
это то что вы хотите реализовать (логин в верхнем правом углу, переход в закрытый раздел и т.п.)?

Если да, то это все делается стандартными средствами... хотя нет, нужен модуль PHP (
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку
) или прямо в коде шаблона написать соответствующий простой код:

Код: Выделить всё
$u = new User();
if ($u->isRegistered()) {
  if (Config::get("ENABLE_USER_PROFILES")) {
     $userName = '<a href="' . $this->url('/profile') . '">' . $u->getUserName() . '</a>';
  } else {
     $userName = $u->getUserName();
  }

echo "<span class=\"sign-in\">Здравствуйте <b>$userName</b><br /><a href=\"".$this->url('/login', 'logout')."\">".t('Sign Out')."</a></span>";
} else {
echo "<span class=\"sign-in\"><a href=\"".$this->url('/login')."\">Вход на сайт</a></span> или <span class=\"register\"><a href=\"".$this->url('/register')."\">Регистрация</a></span>";
}


Модуль PHP c этим кодом ставите в врехнюю правую часть шаблона, там нужно предварительно позицию предусмотреть.

Так мы просто решим вопрос с входом на сайт. Еще хорошо бы в настройках сайта указать, чтобы после авторизации пользователь попадал на страницу профиля.

Теперь ответ на вопрос №1: да, Вы правильно поняли. Будет ли пользователь попадать в админку решается на уровне ACL, т.е. по-простому - если пользователь не входит в группу администраторов, то он в админку не попадает даже близко.

На самом деле, чтобы дать ответы на поставленные вопросы требуется куда дополнительной информации. Какой шаблон используете, какая версия C5, дружите ли с PHP и т.п.

Re: Модуль авторизации ("для своих")

СообщениеДобавлено: 10 окт 2012, 22:42
Count_Raven
Я бы еще посоветовал включить ADVENCED PERMISSIONS MODEL в конфигурации. Чтобы можно было назначать права блокам и областям. Простые пользователи не будут видеть в данном случае вещи, которые видят привилегированные пользователи, даже если простые зарегистрированы. Очень гибко.

Можно посмотреть реализации авторизации:
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку

Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку

Это как примеры.

И повторю коллегу:
На самом деле, чтобы дать ответы на поставленные вопросы требуется куда дополнительной информации. Какой шаблон используете, какая версия C5, дружите ли с PHP и т.п.

Re: Модуль авторизации ("для своих")

СообщениеДобавлено: 11 окт 2012, 10:05
olga_work6
Огромное спасибо!

Все три варианта авторизации - это то, что надо. Мой вариант еще проще, без регистрации, т.к. сайт корпоративный, регистрировать пользователей буду сама, через админку и затем высылать им логин и пароли на почту.
Я вставила php-код в шаблон, все хорошо, но вызывается стандартный модуль авторизации - .$this->url('/login').

У меня 4 вопроса:
1) Как привязать всплывающую форму, например как в
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку
?
2) Куда ведет эта ссылка: . $this->url('/profile') ?
2) Куда ведет эта ссылка: . $this->url('/login') ?
3) Config::get("ENABLE_USER_PROFILES") - это стандартная С5 конструкция ?

Дополнительная информация:
- С5: 5.4.2.1
- шаблон: whitespace, но я его полностью переделала + меняю CSS настройки для мега меню и проч. в шаблонах Custom.
- Навыки: хорошо знаю html+CSS, использую Jquerry + немножко Javascript. Разберусь в чужом PHP коде, смогу написать свой простенький.
Если посоветуете что почитать по PHP, буду признательна. Книжек много, но мне нужно чтобы "быстро и понятно" в приложении к С5 (очень уж мне понравился этот движок, хочу в нем разобраться) , можно на английском.

Re: Модуль авторизации ("для своих")

СообщениеДобавлено: 11 окт 2012, 13:03
cmsservice
olga_work6 писал(а):Все три варианта авторизации - это то, что надо. Мой вариант еще проще, без регистрации, т.к. сайт корпоративный, регистрировать пользователей буду сама, через админку и затем высылать им логин и пароли на почту.

Можете просто удалить ссылку на регистрацию. :)

olga_work6 писал(а):2) Куда ведет эта ссылка: . $this->url('/profile') ?

В профиль пользователя на фронтальной части сайта. Там он может поменять пароль, загрузить автар, посмотреть личные сообщения и т.п. По-другому его можно назвать - Личный кабинет. Если владеете программированием, то профиль можно расширять как угодно, у нас там встроено куча дополнительного функционала, например. При чем пользователи, принадлежащие разным группам пользователей, видят разный функционал личного кабинета. Все это делается довольно просто, но требует немного программирования.

olga_work6 писал(а):2) Куда ведет эта ссылка: . $this->url('/login') ?

Она ведет на стандартную страницу логина пользователя.

olga_work6 писал(а):3) Config::get("ENABLE_USER_PROFILES") - это стандартная С5 конструкция?

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

olga_work6 писал(а):Если посоветуете что почитать по PHP, буду признательна. Книжек много, но мне нужно чтобы "быстро и понятно" в приложении к С5 (очень уж мне понравился этот движок, хочу в нем разобраться) , можно на английском.


По движку для разработчиков вот:

По PHP любой доступный учебник не помешает.

Re: Модуль авторизации ("для своих")

СообщениеДобавлено: 11 окт 2012, 16:16
olga_work6
Константин. спасибо! Про ссылку на регистрацию и фронтенды я догадалась :idea: , меня интересуют бэкенды, маршрут доступа к файлам, мне как-то проще по FTP посмотреть.

И еще, проблемка осталась: если мы используем стандартный логин, как сделать для него форму авторизации? Как я догадываюсь, всплывающее окно с помощью jquerry реализовано, а в Вашем варианте - скорее всего собственный класс CSS в "теме", да? Только вот не могу сообразить, как встроить форму ввода на страницу сайта.

Re: Модуль авторизации ("для своих")

СообщениеДобавлено: 11 окт 2012, 17:27
cmsservice
olga_work6 писал(а):меня интересуют бэкенды, маршрут доступа к файлам, мне как-то проще по FTP посмотреть.

Простите ограниченность моего ума, но я не совсем понял, что Вы хотите посмотреть по FTP :)

olga_work6 писал(а):И еще, проблемка осталась: если мы используем стандартный логин, как сделать для него форму авторизации? Как я догадываюсь, всплывающее окно с помощью jquerry реализовано

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

olga_work6 писал(а):а в Вашем варианте - скорее всего собственный класс CSS в "теме", да? Только вот не могу сообразить, как встроить форму ввода на страницу сайта.

Не совсем так. Если немного поучить матчасть (вот тут
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку
раздел "Customizing System Pages"), то можно в директории /config обнаружить файлик site_theme_paths.php в который хорошо бы посмотреть и сделать необходимые правки :)

Re: Модуль авторизации ("для своих")

СообщениеДобавлено: 12 окт 2012, 18:23
Count_Raven
Так, был немного занят, ну, начнем:

1. Как у вас будет появляться форма - это ваше дело. Можете сделать это на jQuery, который идет сразу в составе Concrete5, можно просто на чистом JavaScript без фреймворков, можно отключить jQuery и подключить MooTools - как вам угодно. Это не относится ни коим образом к Concrete5, это только манипуляции с CSS и DOM посредством JavaScript. Другое дело, AJAX-запросы в этом примере будут использовать jQuery, но это вы тоже можете изменить - разница в том, как они будут реализованы - совсем небольшая.

2. Сейчас будем делать для вас простейший пример.

2.1. Добавьте в шаблон, где у вас будет находиться ссылка типа "Войти" такой код (уберем OpenID и регистрацию):
Код: Выделить всё
<div id="user-controls">
   <?php
      $u = new User();

      if ($u->isRegistered()) {
   ?>
   <a href="<?php echo DIR_REL ?>/index.php/profile/" class="profile-link"><span><?php echo $u->getUserName(); ?></span></a> |
   <a href="<?php echo DIR_REL ?>/index.php/login/logout/" class="signout-link"><span>Выйти</span></a>
   <?php
      } else {
   ?>
   <a href="login" class="signin"><span>Войти</span></a>
   
   <fieldset id="signin_menu">
         <form method="post" id="signin_form" action="<?php echo $this->url('/login', 'do_login')?>">
            <div id="login-form-wrapper">
               <p>
                  <label for="uName"><?php  if (USER_REGISTRATION_WITH_EMAIL_ADDRESS == true) { ?>
                     Email адрес
                  <?php  } else { ?>
                     Имя пользователя
                  <?php  } ?></label>
                  <input id="uName" name="uName" <?php echo (isset($uName)?'value="'.$uName.'"':'');?> title="Имя пользователя" placeholder="Имя пользователя" required tabindex="1" type="text" />
               </p>
               
               <p>
                  <label for="uPassword">Пароль</label>
                  <input id="uPassword" name="uPassword" value="" title="Пароль" placeholder="Пароль" required tabindex="2" type="password" />
               </p>
               <p>
                  <input id="submit" name="submit" value="Войти" tabindex="3" type="submit" />
               </p>
               
               <p class="remember">
                  <input id="uMaintainLogin" name="uMaintainLogin" value="1" tabindex="4" type="checkbox" title="Автоматически входить при каждом посещении сайта в течении двух недель" />
                  <label for="uMaintainLogin">Запомнить меня</label>
               </p>
            </div>
            <?php  $rcID = isset($_REQUEST['rcID']) ? preg_replace('/<|>/', '', $_REQUEST['rcID']) : $rcID; ?>
            <input type="hidden" name="rcID" value="<?php echo $rcID?>" />
         </form>
   </fieldset>
   <?php } ?>
</div>

Этот код отображает в зависимости от того, авторизован ли пользователь, либо "Войти", либо Имя пользователя со ссылкой на профиль и ссылку "Выход". Да, тут же находится форма авторизации, невидимая (CSS display: none;).

2.2. Добавьте в CSS вашего шаблона следующий код:
Код: Выделить всё
#user-controls {
   margin:0 auto;
   position: relative;
}

#user-controls a.signin {
   background: #BCD2C2;
   padding:4px 6px 6px;
   text-decoration:none;
   font-weight:bold;
   color:#fff;
   -webkit-border-radius:4px;
   -moz-border-radius:4px;
   border-radius:4px;
}

#user-controls a.signin:hover {
   background: #9FC8A8;
   color: #FFFFFF !important;
}

#user-panel a.signin {
   position:relative;
   margin-left:3px;
   text-decoration: none!important;
}

a.signin span {
   background-image:url("images/key-up.gif");
   background-repeat:no-repeat;
   background-position: 100% 50%;
   padding: 4px 23px 6px 0;
}

#user-controls a.menu-open {
   background:#9FC8A8!important;
   color:#2F5231!important;
   outline:none;
   
   -moz-box-shadow: #999999 2px 2px 2px;
   -webkit-box-shadow: #999999 2px 2px 2px;
   -o-box-shadow: #999999 2px 2px 2px;
   box-shadow: #999999 2px 2px 2px;
}

#small_signup {
   display:inline;
   float:none;
   line-height:23px;
   margin:25px 0 0;
   width:170px;
}

a.signin.menu-open span {
   background-image:url("images/key-down.gif");
   color:#2F5231;
}

#signin_menu {
   -moz-border-radius-topleft:5px;
   -moz-border-radius-bottomleft:5px;
   -moz-border-radius-bottomright:5px;
   -webkit-border-top-left-radius:5px;
   -webkit-border-bottom-left-radius:5px;
   -webkit-border-bottom-right-radius:5px;
   
   border-top-left-radius:5px;
   border-bottom-left-radius:5px;
   border-bottom-right-radius:5px;
   
   -moz-box-shadow: #999999 2px 2px 2px;
   -webkit-box-shadow: #999999 2px 2px 2px;
   -o-box-shadow: #999999 2px 2px 2px;
   box-shadow: #999999 2px 2px 2px;
   
   display:none;
   background-color:#9FC8A8;
   position:absolute;
   width:235px;
   z-index:100;
   border:1px transparent;
   text-align:left;
   padding: 7px;
   top: 11px;
   right: 0px;
   margin-top:5px;
   margin-right: 0px;
   *margin-right: -1px;
   color:#2F5231;
   font-size:11px;
}

#login-form-wrapper {
   background-color: #D2E5D6;
   -moz-border-radius: 5px;
   -webkit-border-radius: 5px;
   border-radius: 5px;
   padding: 10px;
}

#signin_menu input[type=text], #signin_menu input[type=password] {
   display:block;
   width:203px;
}

#signin_menu p {
   margin:0;
}

#signin_menu a {
   color: #2F5231 !important;
}

#signin_menu label {
   font-weight:normal;
}

#signin_menu p.remember {
   padding:10px 0;
}

#signin_menu p.forgot, #signin_menu p.complete {
   clear:both;
   margin:5px 0;
}

#signin_menu p a {
   color:#2F5231!important;
}


2.3. Добавьте (можно вынести в отдельный файл, но для простоты в данный момент, просто добавьте этот код после 2.1) JavaScript со следующим содержанием:
Код: Выделить всё
<script type="text/javascript">
   $(document).ready(function() {
      
      <?php
         $u = new User();
   
         if (!$u->isRegistered()) {
      ?>

      $(".signin").click(function(e) {         
         e.preventDefault();
         $("fieldset#signin_menu").toggle();
         $(".signin").toggleClass("menu-open");
      });
      
      $("fieldset#signin_menu").mouseup(function() {
         return false;
      });
      
      $(document).mouseup(function(e) {
         if($(e.target).parent("a.signin").length==0) {
            $(".signin").removeClass("menu-open");
            $("fieldset#signin_menu").hide();
         }
      });
      
      <?php } ?>
      
   });
</script>


В принципе - все готово. Но нет.
В данном случае, при неверном вводе пароля вас все равно перекинет на стандартную форму авторизации.

3. Нам нужно использовать AJAX авторизацию.

Продолжим:
Контроллеры регистрации и авторизации в Concrete5 уже сразу поддерживают AJAX-авторизацию, для того, чтобы она заработала, достаточно лишь передать параметр запроса format: 'JSON'.
Это можно даже посмотреть в самом контроллере авторизации Concrete5:
Код: Выделить всё
public function do_login() {
................
      if( $_REQUEST['format']=='JSON' ){
         $jsonHelper=Loader::helper('json');
         echo $jsonHelper->encode($loginData);
         die;
      }
}

Собственно, добавим код JavaScript ниже нашего текущего, по идее, нужно его добавить к существующему, да и вообще, как я уже говорил - вынести в отдельный файл, но для краткости и простоты просто добавляем дальше:
Код: Выделить всё
<script type="text/javascript">
$(document).ready(function() {
   $("#submit").click(function () {
      $.ajax({
         type: "POST",
         url: '<?php echo $this->url('/login', 'do_login')?>',
         data: {"format": 'JSON',  },
         dataType: "json",
         beforeSend: function() {
            
         },
         success: function(data) {
            if (data.success == 1) {
               document.location.reload(true);
            } else {
               alert('Неверное имя пользователя или пароль.');
            }
         },
         error: function(req, textStatus) {
            alert('Ошибка соединения.');
         }
         
      });
      return false;
   });
});
</script>


Собственно, вот и все. Это простейший пример, обрезанный, без ссылки "Забыли пароль". Без регистрации (она же вам не нужна). Наворачивать, стилизовать, добавлять эффекты, а также, чтобы ошибка авторизации выводилась не через "alert();", а в красиво оформленный DIV и т.д. и т.п. - это уже ваша задача.

Если что - спрашивайте.

Re: Модуль авторизации ("для своих")

СообщениеДобавлено: 24 сен 2016, 19:46
nikolay22
olga_work6 писал(а):Здравствуйте, вопрос по модулю авторизации.

Поставленная задача: сделать на сайте раздел "для своих", куда можно попасть по паролю.
Ссылку Log in разместить стандартно, в верхнем правом углу. При нажатии - ввод пароля и переход в закрытый раздел.


1. Если я правильно поняла, модуль один и для входа в админскую панель и для доступа зарегистрированных пользователей к закрытымм разделам сайта ?
2. Как "встроить" модуль в шаблон сайта ? Чтобы форма авторизации появлялась на страничке сайта.
3. Если есть другие, бесплатные варианты модуля авторизации, посоветуйте.


Уважаемые памагите!
Мне нужно реализовать тоже самое:
Но есть небольшое но! я не специалист, и в ХТМЛ и ПХП можно по простому сказать, где вырезать и куда вставить, шаблон всех страниц грик йогурт..Спасибо
Поставленная задача: сделать на сайте раздел "для своих", куда можно попасть по паролю.
Ссылку Log in разместить стандартно, в верхнем правом углу. При нажатии - ввод пароля и переход в закрытый раздел.
Модуль один и для входа в админскую панель и для доступа зарегистрированных пользователей к закрытым разделам сайта ? Как "встроить" модуль в шаблон сайта ? Чтобы форма авторизации появлялась на страничке сайта, и человек видел под кем он залогинен. Например все видят каталог, но прайс увидят и скачают только залогиненные.

Re: Модуль авторизации ("для своих")

СообщениеДобавлено: 24 сен 2016, 22:43
Count_Raven
Привет! Какая версия системы?