Перейти к основному содержимому

Презентация к диплому

· 2 мин. чтения

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

В общем надо ответить на три вопроса

  1. Какая проблема?
  2. На каких теоретических и практических исследованиях работа основывалась, есть ли соавторы
  3. Какие получены новые результаты и какие последствия открываются для будующего поколения учёных

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

Календарь на PHP, MySQL и ajax

· 2 мин. чтения

Для корпоративных сайтов зачастую нужен календарь. И ладно бы что-бы он просто показывал дни недели, так зачастую вносится понятие События (Event), а ввиду обширного потенциала этого понятия можно говорить об Event Management System. Поскольку деловым людям свойственно планирование, то такая система должна быть удобной, мобильной и расширяемой. За удобство отвачает ajax, за мобильность - само наличие интернета, а за расширяемость - программист и проектировщик.

А ведь событие ещё может иметь и..

  • повторяемость (с определённым периодом , до бесконечности/определённого числа повторений/конкретной даты )

  • местоположение (для точного - google maps, для неточного - просто текст)

  • привязку к временной зоне

  • неопределённое время или длительность (идёт в todo список?)

  • принадлежать группам или типам событий (деловые встречи, личные встречи, культурные мероприятия)

  • доступ к просмотру для других пользователей (sharing, оповещение)

  • систему оповещения по email/sms/desktop widget


Публичные сервисы

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

Opensource-продукты

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

  • PlansCalendar на php/mysql, без ajax и видов по дням/неделям

  • phpiCalendar внешне обманчив - работает на файловой системе с .ics файлами

  • monket хоть и на ajax, но скуден

  • thyme платен и по сути чуть лучше чем PlansCalendar

  • jquery fullcalendar - оболочка без серверной части

  • jquery wdcalendar

  • myCalendar

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

На будущее разработчикам - на забудьте что календарь должен быть интегрируем, экспортируем в outlook, ical микроформат , удобен и расширяем.

ЧПУ с mod_rewrite

· 2 мин. чтения

Человеко-понятный URL нужен. Так наглядней видеть где вы находитесь. Реализовать ЧПУ можно несколькими способами.

(Apache) mod_rewrite

В зависимости от архитектуры web-системы, загрузка отдельных модулей происходит как правило если не напрямую через GET запрос, то хотя-бы косвенно. Косвенно это когда создаётся страница, а потом специально для неё создаётся путь, сохраняется в БД, изменяем и красив.

Преобразование разных параметров в папки по-моему самое нужное. Включаем mod_rewrite, создаём или дописываем .htaccess что-бы работало всё так:

http://kurapov.name?**mod**=gallery&**action**=list&page=5
http://kurapov.name/gallery/list/?page=5

Options +FollowSymLinks  
RewriteCond %{REQUEST_FILENAME} !-f
RewriteEngine On
RewriteRule ^([A-Za-z0-9^/]+)/([A-Za-z0-9_^/]+)/$ /index.php?mod=$1&action=$2 [QSA,L]
RewriteRule ^([A-Za-z0-9^/]+)/([A-Za-z0-9_^/]+)/?$ /index.php?mod=$1&action=$2 [QSA,L]

Самое главное это конечно же RewriteRule, которое построено на регулярных выражениях , поэтому многие веб-разработчики и не прошли через этот участок. В данном примере в URL ищется в начале (знак ^) две папки, названия которых состоят из букв и цифр. Первая папка становится значением $1, вторая соответсвенно $2. В итоге запрос передаётся в обработку в index.php с GET параметрами. Параметр QSA=query string append добавляет в конец ещё параметры которые запрашивал пользователь.

Установка ЧПУ на существующую систему

Какой получается минус? Если есть файл resources/thumbs/generator.php , то получится что обращение тоже будет перезаписываться, и в действительности будет всё идти на index.php. Более того, если система была спроектирована по относительным путям, где все картинки, фреймы, ссылки не велись от корня, то возникнет проблема с новой адрессацией.

404 перезапись

Как очень быстрое и простое решение можно вместо mod_rewrite использовать перенаправление 404 ошибки

ErrorDocument 404 /index.php

Теперь достаточно в index.php обратится к массиву и вызвать нужный модуль:

header("HTTP/1.1 200 OK");  
header("Status: 200 OK");

$arrURL=explode('/',$_SERVER['REQUEST_URI']);

Не забудьте проверять существует ли такой модуль в системе, и сделать обработку ошибок, в том числе и на уровне header-ов, иначе поисковики могут посчитать что у вас всюду брак.

Введение в Foreign keys

· 1 мин. чтения

Foreign keys это движущая сила реляционных БД. Выборка по нескольким таблицам по прежнему формируется при помощи JOIN-конструкций, но FK создаёт логические связи между таблицами, понятные человеку. Очень полезно в больших проектах, где уследить за всеми связями нелегко, а такие программки как MySQL Workbench хорошо могут эти связи показать.

Создание связей начинается с создания тех таблиц, на которые надо ссылаться. Дальше в ссылающихся таблицах делается поле типа refID. Теперь создаётся уникальный FK который и связывает поля. Ключ может иметь дополнительные свойства, например каскадное удаление или update.

Для удобства создания таких структур можно воспользоваться SQLyog-ом. Типы таблиц естественно только InnoDB. К примеру таблица events ссылающаяся через FK на events_groups выглядит так..

CREATE TABLE `events` (  
`ID` int(11) NOT NULL auto_increment,
`groupID` int(11) default NULL,
UNIQUE KEY `ID` (`ID`),
KEY `FK_events` (`groupID`),
CONSTRAINT `FK_events` FOREIGN KEY (`groupID`) REFERENCES `events_groups` (`ID`) ON DELETE CASCADE,
) ENGINE=InnoDB DEFAULT CHARSET=latin1

OpenUP

· 1 мин. чтения

Многие наверняка слышали про Rational Unified Process. Вообще методик по управлению "ресурсами" человеко-часов уйма и принятие одной из них в свою фирму может дать не только бумажку, но и неэффективность всвязи с тем что такая методика не подходит для области деятельности фирмы.

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

Ради достижения успешности проекта, группа разделяется на 3-6 ролей (вспоминаем сразу классы в RPG?):

  • клиент
  • управляющий проектом
  • аналитик
  • архитектор
  • тестер
  • разработчик

Весь процесс разбивается на 4 этапа - основание, переработка, разработка, заключение. В первом закладывается суть проблемы, во втором она рассматривается, в третьем решается, в четвёртом подтверждается.

Pangalink

· 5 мин. чтения

Банковская ссылка (pangalink) — способ обмена данных купли-продажи между клиентом, банком и магазином, очень распространённая в Эстонии. Эта услуга предоставляется банками в виде услуги магазинам, которым надо платить

WSDL

· 1 мин. чтения

Никогда не задумывались как работает гениальный copy/paste? Правильно, благодаря всяким OLE и COM, которые продвигал Microsoft. В чём же гениальность этой функции? Interoperability, о как!

WSDL это формальный стандарт для описания сервизов сервисов. Под сервисом естественно подразумевается какой-то сайт, портал или просто скрипт. А зачем его описывать? Затем что-бы использовать в других таких же скриптах, программах и сайтах, а это и есть interoperability.

Этот стандарт выглядит как обычный XML файл, разрабатывается W3C и всевозможными корпорациями. Файл состоит из 4 основных тэгов:

  • types в котором под-тэги elements описывают "переменные"

  • interface в котором operations описывают возможные "функции"

  • binding в котором детально объясняется каждая operation

  • service в целом описывает местонахождение конкретного сервиса и используемые им операции

Более старые версии WSDL 1.1 имели иную структуру с portType тэгами.

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

См. также SOAP, типы wsdl операций

Mysql prepared statements

· 2 мин. чтения

воскресенье, 22 апреля 2007 г. в 14:10:12

Подготовленные запросы имеются в MySQL начиная с 4.1 и нужны по трём причинам.

  1. Скорость. Если вы выполняете однообразные запросы, то mysql парсеру каждый раз приходится выполнять распознавание - какой тип запроса, какие данные передаются и тому подобное. Если сделать прототип запроса, а в последствии передавать только данные, то ясное дело что это скажется на скорости.
  2. Передача данных. Мало того что для подобных запросов передача бинарных данных не нуждается в конвертировании в строку, так и то что стандартное ограничение на один запрос имеет около 1 мб можно подвинуть благодаря тому что каждый кусок данных передаётся отдельным запросом, а не одним общим (INSERT скажем).
  3. Безопасность. Благодаря отделению данных от запроса вы можете обезопасить себя от SQL injection .
PREPARE some_statement_1 FROM "INSERT INTO my_table (`some_HTML`, `some_title`) VALUES ('?','?')";  
SET @someparam_1 = "HTML SOURCE";
SET @someparam_2 = "TITLE HERE";
EXECUTE some_stament_1 USING @someparam_1,@someparam_2;
DEALLOCATE PREPARE some_statement_1;

Всё достаточно просто - объявил запрос, вместо переменных поставил символы вопросов, потом по порядку этих символов объявил переменные , выполнил запрос и удалил кэширование (которое только планируется сделать).

Использование подобной техники через PHP на низком уровне занимается PDO extension и mysqli правда порой не совсем удобным способом, ну а если хочется по-старинке эти запросы генерировать самому, то можно попробовать огромную PEAR:DB или DbSimple

Случайная сортировка

· 1 мин. чтения

Mysql позволяет сортировать случайным образом

SELECT * FROM my_table ORDER BY RAND()

Проблема в том, что такая сортировка зачастую вовсе не нужна для всей выборки - хочется просто достать случайный элемент из определённого множества, к тому же ORDER BY RAND() достаточно медленный выход из ситуации.

Можно попробовать делать выборку основываясь на числе элементов в целом и функции RAND():

SELECT name FROM my_table JOIN (  
SELECT CEIL(RAND() * (
SELECT MAX(id) FROM my_table
)) AS randomID
) AS random_table ON random_table.randomID=my_table.ID

На 50000 рядов такой запрос занимает 0.00086 сек.. Сравните с 1.56356 сек обычного варианта ORDER BY RAND().

Недавно натолкнулся на один интересный вариант:

select G.*, rand() as RO from GOODS G order by RO

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

Сортировка матрицы

· 1 мин. чтения

Сортировку можно производить на стороне сервера в БД (самое логичное решение), но зачастую система не продумана заранее настолько и получается что данные приходится выдирать из разных таблиц, между которыми нет очевидных связей. Поэтому сортировать приходится через серверные технологии или даже через javascript на стороне клиента..

Средствами PHP насколько мне известно пока невозможно нормально отсортировать - функции uksort и ksort сортируют по ключам массива, но просто вписать данные столбца в качестве ключа нельзя если могут появится одинаковые ключи.

Небольшая функция на будущее.

  /**
* Sorts matrix by column
*
* @param array $arrMatrix
* @param mixed $col
* @param boolean $direction
* @return array
*/
function sort_matrix($arrMatrix,$col=0,$direction=1){
$result=array();
foreach($arrMatrix as $var => $val){
$set=false;
foreach($result as $var2 => $val2){
if($set==false){
if($val[$col]>$val2[$col] && $direction || $val[$col]<$val2[$col] && !$direction){
$temp=array();
foreach($result as $var3 => $val3){
if($var3==$var2) $set=true;
if($set){
$temp[$var3]=$val3;
unset($result[$var3]);
}
}
$result[$var]=$val;
foreach($temp as $var3 => $val3)
$result[$var3]=$val3;
}
}
}
if(!$set) $result[$var]=$val;
}
return $result;
}

Сохраняющаяся сортировка

· 1 мин. чтения

Допустим у нас есть много отображаемых табличных данных, столбцы которых можно отсортировать. Тогда было бы удобно что-бы при повторном заходе на страницу оставались сохранёнными параметры сортировки - какая колонка как отсортирована.

Представляю небольшой вариант такого решения..

$_SESSION['Sorting'][get_class($this)]= array_merge( $_SESSION['Sorting'][get_class($this)], $_REQUEST);

В сессии кэшируются все параметры некогда используемые, причём новые параметры перезаписывают более старые. С такой техникой можно делать много параметровую сортировку ( ORDER BY param1, param2, param3..) причём передавать через GET только по одному параметру, т.е. не надо делать

?sort[]=param1&sort[]=param2

Введение в Postgre

· 2 мин. чтения

PostgreSQL - крутая СУБД, потому что..

  1. Она не принадлежит какой-либо компании, как например Oracle или mysql и распространяется по BSD-лицензии

  2. Имеет поддержку продвинутых фишек - PL/pgSQL, триггеров. Теоретически это очень полезно при создании очень масштабной системы.

  3. Транзакции по принципам ACID придают скорости - несколько запросов в одной транзакции выполняются как одна атомарная операция. А мультиверсионность помогает избежать блокировки таблиц.

  4. Объектность. Таблица выступает фактически в виде класса, а ряды - в виде объектов, так же как классы могут наследоваться, так и таблицы могут наследоваться.

  5. Система привилегий операций с таблицами, схожа с системой по принципу с Oracle.

  6. Репликации, т.е. использование нескольких серверов даёт масштабируемость.

Переход на PostgreSQL как правило связан с обработкой больших объемов данных - когда число рядов переваливает миллион, то mysql начинает испытывать трудности, а Natural Join нескольких таких таблиц может привести вообще к падению сервера. Да и тесты на параллельность поддерживают Postgre. Энтузиастам может быть интересна же не столь масштабируемость, сколько объектность, позволяющая большую свободу, или если хотите - сложность, по сравнению с mysql.

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

  • Различные типы данных. Нет datetime, зато есть возможность создать тучу своих типов.
  • Отсутсвие autoincrement. Такая функция заменена наличием sequence, и в упрощённом виде может использоваться так:
    CREATE TABLE mynewtable ( id SERIAL }
  • pgAdmin III очень удобная консольная программа, а в качестве замены phpMyAdmin есть phpPgAdmin
  • Аналогом DATE_FORMAT является to_char
  • Заглавные буквы в названиях таблиц и полей по умолчанию переводятся в нижний регистр, это можно обойти используя двойные кавычки
  • Форматом для LIMIT конструкции стал также поддерживаемый с mysql 4LIMIT # OFFSET #
  • Просмотр запущенных процессов реализуется аналогом
    --show processlisе``SELECT * from pg_stat_activity ;

Читайте также:

Excel через javascript

· 2 мин. чтения

Microsoft Excel - незаменимый spreadsheet-редактор, попробуем сделать нечто похожее уже в web-середе.

Выбираем Simple spreadsheet, который уже умеет достаточно много, немного его исправим и создадим возможность сохранять все данные в БД. GPL лицензия также радует.

Прежде всего - изменить размеры редактируемого окна, которое запускается из spreadsheet.php. Для этого изменяем styles.css и при необходимости - spreadsheet.js, где делаются собственно таблицы.

Дальше - сделаем сохранение данных. Для этого надо весь код поместить в форму, добавить submit, к которому приписать onclick='save();'

Simple spreadsheet хранит все данные в своём "javascript" формате который фактически просто переменные инициализации, поэтому сохранять данные мы будем не только их, но и данные в csv формате. Для этого есть функция saveCSV, которую достаточно немного изменить и добавить спрятанный textarea c id='csv'.

getObj("csv").value = out;

Данные сохраняются в таблицу БД. Что-бы их обратно показать в таблице для изменений, достаточно в spreadsheet.php сохранённые данные передать в $init_data

Для чтения CSV надо выдавать заголовок типа

header("Pragma: public"); header('Content-Type: text/csv'); //header('Content-Type: application/vnd.ms-excel'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header("Content-Description: downloaded from iunu.net as an example"); header('Content-Disposition: attachment; filename="'.MD5(time()).'.csv"');

Код достаточно понятен, например что-бы при нажатии Tab фокус переходил на соседнюю клетку, я добавил в функцию keypress практически в самый конец

if (keyCode==9) { saveCell(); ret=false; editCell(currRow,currCol+1,keyCode); }

Если csv не подходящий вариант, и хочется создания xls, можно воспользоваться портированным с perl, writeexcel 'ем, а для импорта xls есть spreadsheet_excel_reader однако проблемы с utf8 всё ещё не имеются..

Многоязычность Smarty

· 3 мин. чтения

Многоязычность сайта - важный фактор для корпоративных сайтов. Какие существуют подходы?

  1. Разные языки - разные сайты. Такое решение очень простое и используется для международных фирм. Каждый регион владеет своим доменом, хостинг как правило делается на одном защищённом сервере, где все данные доступны для всех доменов, либо же раздельно, что в принципе не играет большой роли, главное то - что платформа под каждый язык своя.
  2. Разные языки - разные темплейты. Решение так же простое - для каждого языка свой темплейт. Контроллер всё же один и сам выбирает какие данные из БД выбирать. Большой минус в том, что при изменении дизайна, надо менять темплейты во всех языках, поэтому может случится что языки с разными дизайнами.
  3. Разные языки - разные данные. Неудобен тем, что для каждой мелкой системной надписи надо лезть и добавлять строчки переводов. Кроме того возникают вопросы при составлении структур типа дерева - зависит ли структура от языка или нет. Например при составлении каталога продуктов, в случае если необходимо добавить новый язык, надо отдельно составлять всю структуру, или достаточно перевести уже созданную?

CVS и SVN

· 2 мин. чтения

CVS и SVN (Subversion) это программы хранения истории изменения проекта в файловой системе разными пользователями в результате одновременной совместной работы. Существует клиентская и серверная часть.

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

SVN это наследник CVS, впрочем если вы испытываете большую симпатию к Microsoft, вы можете использовать Visual SourceSafe. Из себя это представляет сетевую программу, где центральный сервер хранит все вносимые изменения, а клиенты уже производят операции над этими изменениями. Поэтому если вы работаете в фирме, и сервер уже имеется, то вам достаточно установить клиентскую программу.


Для windows можно посоветовать tortoiseSVN. В настройках устанавливается связь с localhost:3690, где висит SSH-тунненель putty (настраивается в Connection/SSH/Tunnels) или SSH tunnel client. Если хочется платного, то есть SmartSVN.

После настроек - создаём папку под проект и работаю полностью из контексного меню эксплорера делаем операцию checkout (копирование working copy в локальную папку). Что-бы сохранить свои изменения в файлах делаем операцию update (копирование изменений из svn в локальную папку) и commit (сохранение своих изменений в svn). В случае если файлы были изменены одновременно, то svn не позволит вам сохранить файл и отметит его как конфликт, который надо решить либо через diff (сравнение svn и локальной версии), либо через solved (перезаписать версию svn своей). В особо запущенных случаях, когда файлы переименовываются или удаляются не используя функции svn, вам прийдётся запускать cleanup.

Из дополнительных функций есть функция вины (blame), благодаря которой можно найти кто какую строчку написал. Удачи в проектах!

Управление IT-проектом

· 3 мин. чтения

Несомненно в мире множество фирм в каждой из которых принят некий обычай как проект надо делать, а для этого созданы всевозможные процессы развития проекта типа waterfallspiralRUP и тд.

Попробую изложить, как на моём опыте обычно ведётся IT-проект (CMS, CRM, intranet, custom-инфосистема) или как бы этого хотелось в идеале.

Мотивация

· 1 мин. чтения

Мотив - побуждение к действию, т.е. фактор, выводящий систему в состояние нестабильности.

Психология разбивает мотивацию человека по пунктам

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

Теологический дуализм. Катары и альбигойцы

· 2 мин. чтения

Я долго непонимал, как и Лев Толстой , зачем придумывать видение троицы в божественной ипостаси, зачем разделять Бога как любовь на "источник-объект-любовь" в виде "отец-сын-дух".

Вся проблема встала при формировании христианства. Как может быть мессия Богом, если Бог один. Объявить воплощением Бога на земле? А как быть с бытием Бога, перестал ли Бог существовать для всех при рождении на земле? Как быть с первичностью ипостасей?

Как решение - просто создать субъективную характеристику Бога со стороны человека - как человек на него смотрит, так ему Бог и представляется. Если Бог обитает повсюду, как мир - всеокружающий, то это Бог-отец. Если это любовь и воодушевление человек чувствует от мира, то это Бог-дух. Если это познание Бога через себя, то это Бог-сын.

Плагины браузеров

· 2 мин. чтения

Поскольку браузер сейчас практически самая важная программа в операционной системе я привожу тут наиболее востребованные (мной) расширения и улучшения.

Первым делом - увеличьте число одновременных соединений с сервером, поскольку у вас соединение уже не dial-up. В firefox это доступно в about:config / network.http.pipelinining=true и network.http.pipelining.maxrequests=10.

Firefox

  • Sync синхронизирует закладки, историю и пароли между платформами и компами

  • FastDial показывает наиболее используемые страницы, настраивается вручную

  • Chromifox theme очень простой и красивый внешний вид на подобие браузера Google Chrome

  • Mouse gestures так же пришли из Opera и позволяют более удобную навигацию

  • All-in-One sidebar очень схож с левой панелью в Opera, где значительно удобней оперировать данными чем из меню

  • Firebug незаменимый компонент для разработки современных javascript технологий, плюс отличная возможность просмотра реально изменяющегося html и функции inspect element. Только не забывайте отключать когда он не нужен.

  • Web developer очень помогает показывая все используемые css и js на странице


Вторичные, не столь важные плагины:

  • NoScript - защита от XSS атак

  • ietab даёт два браузера в одном

  • GridFox - показывает параллельные линии фиксированной ширины на странице для сеточной визуальной разметки

  • Memori.ru - аналог bobrdobr.ru, del.icio.us.. онлайн закладки

  • pagerank от Google для веб-мастеров (+ для 3.5)

  • PicLens предоставляет трёхмерныйинтерфейс и подгрузку на лету при поиске картинок в гугле

  • aging tabs визуально подчёркивают давно не используемые табы

  • WindowResizer - изменение размера экрана под определённое расширение экрана

  • Mini Map sidebar показывает карты

  • Table2Clipboard позволяет копировтаь таблички сохраняя форматирование

  • Sxipper - сохраняет пользовательские метаданные, упрощая комментирование в блогах и регистрацию на сайтах

  • Hide MenuBar - прячет меню, подобно IE7 + HideCaption подобно Chrome

  • Feedburner - показывает число RSS подписчиков в строке состояния

  • MeasureIt позволяет измерить в пикселях,что сколько занимает места на экране

  • ColorZilla позволяет пипеткой выбрать нужный цвет со страницы - часто экономит время

  • locationbar2 улучшает читаемость URL в адрессной строке

  • XHTML validator

  • Selenium IDE - для тестеров

  • Ad block plus

IE плагины

Chrome

Остальные:

  • Dragonfly - аналог firebug для Opera, в Safari он встроенных

Авторизация

· 2 мин. чтения

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

Зачем это надо? Система как цивилизация - чем дальше она развивается, тем сложнее становятся отношения между пользователями и настаёт момент, когда необходимо

  • Разделение труда. Типичный пример - системы типа intranet, куда имеют доступ только работники компании, соответсвенно никто ничего там испортить не может, однако ввод данных осуществляется разными людьми и им просто нет нужды видеть чужие интерфейсы работы с системой.
  • Разделение аудитории. Пример - финансовые системы, сайты с разделением на admin-public, т.е. системы где большая вероятность вандализма простыми пользователями

В простых Web-инфосистемах авторизация для упрощения может быть забита сразу в коде. Никто кроме Васи Пупкина не может зайти в админпанель - делать проще простого. Но не стоит путать админпанель доступную всем но не знающим как в неё зайти от админпанели защищённой авторизацией .