Tatsuhiro
Новичок
Добрый день.
Прошу помощи в следующей вопросе. Опишу ситуацию что делаю.
Создаю CMS для учета сотрудников организации, где будут учитываться сами сотрудники (ФИО, логин, пароль). Будут три типа пользователей: админ, локальный админ и пользователь.
Админ - имеет доступ на любые действия.
Локальный админ - на просмотр, добавление и изменение записей только в одной таблице.
Пользователь - на просмотр записей только в одной таблице.
Задача - мониторить текущее подключение пользователя (отображать подключен он или нет). Пользователей кто подключаться будет много (более 100).
Что я сделал:
Если залогиниться на сервере под учеткой anton или kirill - вопросов нет.
Теперь страницы админки.
Как я делал это ранее.
Три файла: index.php, login.php, db_conn.php
Структура файла db_conn.php:
Структура файла login.php:
Подключаем файл db_conn.php.
Здесь форма входа. Форма из двух полей - имя пользователя, пароль.
Форма отправляет на эту страницу.
Проверяем что форма отправлена и делаем запрос в таблицу users.
Если найден такой пользователь, то добавляем данные о пользователе в сессию и происходит редирект на страницу index.php
Структура страницы index.php:
В функции checkUserInSession проверяем, что в сессии есть ID пользователя и если нет, то редирект на страницу login.php
Если подключение происходит для одного пользователя - anton и в форму на странице login.php ввести данные этой записи, то всё нормально и подключение проходит на ура. НО только для пользователя anton.
Если я в форму ввожу данные учетки kirill (локального админа), то тоже подключение происходит. НО. Подключение к БД идет от пользователя anton, т.к. anton указан в файле db_conn.php.
Поэтому вопросы:
Если мне надо мониторить подключение пользователей и anton и kirill, то я должен сделать подключение для каждого из с этих пользователей? Если да, то как? Как написать функцию на подключение каждого из пользователей?
Это сильно будет нагружить сервер? Если подключаться одновременно будет более 200 пользователей? Надо ли это вообще ?
Прошу помощи в следующей вопросе. Опишу ситуацию что делаю.
Создаю CMS для учета сотрудников организации, где будут учитываться сами сотрудники (ФИО, логин, пароль). Будут три типа пользователей: админ, локальный админ и пользователь.
Админ - имеет доступ на любые действия.
Локальный админ - на просмотр, добавление и изменение записей только в одной таблице.
Пользователь - на просмотр записей только в одной таблице.
Задача - мониторить текущее подключение пользователя (отображать подключен он или нет). Пользователей кто подключаться будет много (более 100).
Что я сделал:
- зашел на сервер PostgreSQL через аккаунт postgres
- создал новую роль/группу mega_admin, дал ему полные права (суперпользователь, создание ролей и прочее)
- создал новую роль anton, присвоил пароль 12345, добавить ее в группу mega_admin
- перелогинился от имени записи anton
- создал таблицу users (где будут учитываться сотрудники)
- добавил новую запись: ФИО - Иванов Антон Иванович, логин - anton, пароль - 12345
- добавил новую группу/роль local_admin, дал ей право на просмотр, добавление и изменение записей в таблице users
- добавить новую роль - kirill, пароль - 98765 и отпределил ей группу local_admin
- добавил запись в таблице users: ФИО - Кириллов Кирилл, логин - kirill, пароль - 98765
Если залогиниться на сервере под учеткой anton или kirill - вопросов нет.
Теперь страницы админки.
Как я делал это ранее.
Три файла: index.php, login.php, db_conn.php
Структура файла db_conn.php:
Код:
<?php $connInfo = pg_pconnect("host='localhost' port='5432' dbname='mainbase' user='anton' password='12345'");
// Проверка соединения
if(pg_connection_status($connInfo) !== PGSQL_CONNECTION_OK) {
die("Ошибка соединения с базой данных. Обратитесь к системному администратору.");
}?>
PHP:
<?php
// Подключаем файлы
require_once("inc/session.php"); // файл с сессией
require_once("inc/globals.php"); // файл с глобальными переменными
require_once("inc/db_conn.php"); // файл подключения
// скрипт входа
if (isset($_POST['action']) && $_POST['action'] =="enter") {
// формируем переменные
$u_name = $_POST["login"]; // имя пользователя
$u_password = $_POST["pass"]; // пароль
$query = "SELECT * ";
$query .= "FROM " . TABLE_USERS . "";
$query .= "WHERE user_login = '{$u_name}' AND user_password = '{$u_password}' ";
$user_set = pg_query($connInfo, $query);
if($user = pg_fetch_assoc($user_set)){
$_SESSION["worker_id"] = $user["user_id"]; // ID пользователя
}
redirect_to(index.php);
}
?>
<html lang="ru">
<head>
</head>
<body>
<header class="header">
</header>
<main class="main">
<div class="content">
<form action="" class="general" method="post">
<div class="column1">Вход</div>
<div class="column2" >
<table class="form" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td><label for="login">Логин</label><span class="ness">*</span></td>
<td>
<input type="text" name="login" required="required" />
</td>
</tr>
<tr>
<td><label for="pass">Пароль:<span class="ness">*</span></label></td>
<td>
<input type="password" name="pass" required="required" />
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2"><button type="submit" name="action" value="enter" >войти</button></td>
</tr>
</tfoot>
</table>
</div>
</form>
</div>
</main><!-- .main-->
</body>
</html>
Здесь форма входа. Форма из двух полей - имя пользователя, пароль.
Форма отправляет на эту страницу.
Проверяем что форма отправлена и делаем запрос в таблицу users.
Если найден такой пользователь, то добавляем данные о пользователе в сессию и происходит редирект на страницу index.php
Структура страницы index.php:
PHP:
<?php
// подключаем файлы
require_once("inc/session.php"); // файл для сессии
require_once("inc/globals.php"); // файл с глобальными переменными
require_once("inc/functons.php"); // файл функций Открытой части
require_once("inc/db_conn.php"); // файл подключения к БД
// проверяем наличие данных о пользователе в сессии
checkUserInSession($_SESSION["worker_id"]);
// скрипт входа
if (isset($_POST['action']) && $_POST['action'] =="enter") {
// формируем переменные
$u_name = $_POST["login"]; // имя пользователя
$u_password = $_POST["pass"]; // пароль
$query = "SELECT * ";
$query .= "FROM " . TABLE_USERS . "";
$query .= "WHERE user_login = '{$u_name}' AND user_password = '{$u_password}' ";
$user_set = pg_query($connInfo, $query);
if($user = pg_fetch_assoc($user_set)){
$_SESSION["worker_id"] = $user["user_id"]; // ID пользователя
}
redirect_to(index.php);
}
?>
<html lang="ru">
<head>
</head>
<body>
<header class="header">
</header>
<main class="main">
<div class="content">
<form action="" class="general" method="post">
<div class="column1">Вход</div>
<div class="column2" >
<table class="form" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td><label for="login">Логин</label><span class="ness">*</span></td>
<td>
<input type="text" name="login" required="required" />
</td>
</tr>
<tr>
<td><label for="pass">Пароль:<span class="ness">*</span></label></td>
<td>
<input type="password" name="pass" required="required" />
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2"><button type="submit" name="action" value="enter" >войти</button></td>
</tr>
</tfoot>
</table>
</div>
</form>
</div>
</main><!-- .main-->
</body>
</html>
Если подключение происходит для одного пользователя - anton и в форму на странице login.php ввести данные этой записи, то всё нормально и подключение проходит на ура. НО только для пользователя anton.
Если я в форму ввожу данные учетки kirill (локального админа), то тоже подключение происходит. НО. Подключение к БД идет от пользователя anton, т.к. anton указан в файле db_conn.php.
Поэтому вопросы:
Если мне надо мониторить подключение пользователей и anton и kirill, то я должен сделать подключение для каждого из с этих пользователей? Если да, то как? Как написать функцию на подключение каждого из пользователей?
Это сильно будет нагружить сервер? Если подключаться одновременно будет более 200 пользователей? Надо ли это вообще ?