Вход Script со скрытыми кнопками

Я использую PHP и JavaScript для создания моего сайта папы. Он хочет включить систему регистрации на свой сайт, и у меня есть дизайн для системы с использованием PHP. Моя проблема в том, как показывать кнопки, если пользователь зарегистрирован?

Пример - У вас есть Домой, Продукты, О нас и Контакты. Я хочу иметь кнопки для Дилера, Дистрибьютора и, возможно, другую информацию, если пользователь вошел в систему. Таким образом, у меня будут Домой, Продукты, О нас, Контакты, Дилер (если вход в дилер), Дистрибьютор (если вход для дистрибьютора) и так вперед.

Будет ли JavaScript хорошим способом сделать это или PHP, а может быть, и то, и другое? Использование JavaScript для отображения и скрыть кнопки и PHP, чтобы проверить, какие кнопки показывать.

Ответы

Ответ 1

Что касается безопасности, , вы не можете доверять тому, что приходит от клиента:

  • Посетитель может видеть весь ваш код (HTML и Javascript, а не PHP) и попробовать материал
  • Посетитель может даже не использовать браузер; тривиально легко отправить запрос с помощью script

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

Если вы не собираетесь показывать кнопки, нецелесообразно отправлять HTML и изображения в браузер, а затем скрывать их с помощью Javascript. Я бы посмотрел на PHP.

Ответ 2

В вашем файле меню или w/e вы помещаете:

<? require 'auth.php' ?>
<ul>
    <li><a href="">Home</a></li>
    <li><a href="">Products</a></li>
    <? if( loggedin() ): ?><li><a href="">Secret area</a></li><? endif; ?>
</ul>

Затем на страницах, требующих авторизации, просто выполните следующее:

<?php 
    require 'auth.php';
    require_login();
?>

Где auth.php может содержать:

<?php
    function loggedin(){
        return isset( $_SESSION['loggedin'] );
    }

    function require_login(){
        if( !loggedin() ){
            header( 'Location: /login.php?referrer='.$_SERVER['REQUEST_URI'] );
            exit;
        }
    }
?>

Ответ 3

Если вы используете javascript для скрытия кнопок, вы открываете дыру в приложении. Злоумышленник может либо отключить javascript, либо применить некоторые свои собственные, чтобы обойти вашу безопасность.

Я предлагаю использовать PHP для выбора или отрисовки кнопок или нет. Я делаю это в .NET довольно часто.

Вы должны иметь возможность проверять доступ пользователей на стороне сервера, когда они пытаются использовать кнопку с ограничениями.

Ответ 4

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

<?php
require_once 'Auth.php';
// output some html
if (isLoggedIn()) {
    echo 'html for logged in user';
}
// rest of html

Для страниц, которые должны видеть только проверенные пользователем пользователи, контроллер проверяет, вошли ли они в систему и не перенаправляет ли они их на страницу входа.

<?php
public function viewCustomer($customerId) {
    if (!isLoggedIn())
        redirectToLoginPage();
}

Ответ 5

Все, что написал Кристиан Лескуйер, верно. Обратите внимание, однако, что он сказал "Я бы", а не "вы должны". Выбор не так просто.

Прежде всего, безопасность не является проблемой при выборе. При выполнении действия необходимо иметь проверку безопасности на сервере. Какой код решает показать/скрыть кнопку, ведущую к действию, не имеет значения.

Это оставляет нам только один недостаток, заключающийся в том, что мы делаем логику show/hide в Javascript - HTML, отправленный пользователю, больше, чем необходимо. Это не может быть большой проблемой.

Если показать/скрыть логику в PHP, есть минус. Необходимый PHP-код обычно является тегом суп. Код Akira служит хорошим примером того, как обычно это делается.

Соответствующий код Javascript, вероятно, будет выглядеть примерно так:

if (logged())
{
    elementSecretArea.style.display = "list-item";
}

(при условии, что элементы, которые могут быть скрыты, имеют отображение: по умолчанию не установлено).

Этот стиль также позволяет славный сценарий "Ajax": пользователь видит страницу без секретной области, вводит пароль, видит всю секретную область без обновления страницы.

Итак, если у вас уже есть script, который запускается при загрузке вашего документа по другим причинам, я бы серьезно подумал о том, есть ли там демонстрация/скрытие логики.

Ответ 6

В основном, где у вас есть меню в html, скажем, как список <ul> <li>Home</li> </ul>, вы добавляете php после </li> последнего элемента:

<?php
  if($session-logged_in) {    
?>

<li>My Account</li>

<?php  
  }
?> 

Ответ 7

Что вы делаете, просто используете сеанс, когда пользователь вошел в систему. Вы можете это так

$_SESSION["UserId"] = $row['iduser'];
$_SESSION["UserType"] = $row['user_type'];
$_SESSION["UserName"] = $row['username'];

Затем вы можете проверить этого пользователя с типом пользователя и сделать видимые необходимые кнопки, как это

<?php
if( $_SESSION["UserType"] == 'Dealer'){
?>
<a href="your url" class="btn btn-primary" />
<?php
}
?>