ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

19.01.2009, 11:48
|
|
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
Провел на форуме: 2238549
Репутация:
1318
|
|
Юзай принцип ACL (Access Control List). На каждое атомарное действие (view/insert/update/delete) над каждым объектом задай уровни доступа, которые будут опираться на GroupID юзера и храниться в базе. Затем одним простым запросом вытаскивай всю таблицу ACL и сверяй права. Можешь реализовать кэширование, если напрягает постоянное обращение к базе.
http://ru.wikipedia.org/wiki/ACL - оно. Применяй эту концепцию к ООП.
UPD: Данный подход позволяет в дальшейшем легко управлять правами групп через админский интерфейс, не редактируя исходники.
UPD2: Надеюсь ты в своей CMS используешь ООП, в противном случае я тебе сочувствую.
Всё верно говоришь, только я бы не стал задавать уровни доступа над каждым объектом - слишком много мета-описания для однотипных объектов... Слишком этом громоздко в каждой странице проверять права доступа и т.д.). Лучше хранить уровни доступа для групп объектов - ну там статьи, новости, файлы, профили пользователей и т.д., т.е. права определяют не отдельные объекты, а группу однотипных объектов.
|
|
|

19.01.2009, 12:46
|
|
Постоянный
Регистрация: 15.06.2007
Сообщений: 527
Провел на форуме: 1734541
Репутация:
214
|
|
данные о правах
PHP код:
$query = "SELECT users.user_id,users.right_id,rights.* FROM users,rights WHERE users.right_id=rights.right_id and login='$name'";
$res = mysql_query($query) or trigger_error(mysql_error().$query);
if ($row = mysql_fetch_assoc($res)) {
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['priv']=$row['right_id'];
}
в header.inc.php
прописываю конкретно какие права у юзера
PHP код:
mysql_connect('localhost','calendar','123123') OR DIE("Не могу создать соединение ");
mysql_select_db('smart_calendar') or die(mysql_error());
$query = "SELECT * FROM `rights` where right_id='$_SESSION[priv]'";
$res=mysql_query($query) or die(mysql_error());
while($row=mysql_fetch_array($res)){
$_SESSION['rights']=$row['rights'];
$_SESSION['holidays']=$row['holidays'];
$_SESSION['structure']=$row['structure'];
$_SESSION['users']=$row['users'];
а далее на каждой странице идет проверка
PHP код:
if($_SESSION['holidays']=='1'){
это вообще правильно все?
З.Ы. это не кмска )
|
|
|

19.01.2009, 12:57
|
|
Участник форума
Регистрация: 28.07.2008
Сообщений: 158
Провел на форуме: 728470
Репутация:
115
|
|
Насколько я понимаю, при взломе сайта на reverse-ip сессии твоих пользователей можно будет редактировать, так что я бы сверялся с БД каждый раз когда нужно проверить права.
|
|
|

19.01.2009, 13:02
|
|
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
Провел на форуме: 2238549
Репутация:
1318
|
|
Насколько я понимаю, при взломе сайта на reverse-ip сессии твоих пользователей можно будет редактировать, так что я бы сверялся с БД каждый раз когда нужно проверить права.
prescott, при чём тут reverse-ip? Глупый набор слов не имеющий никакого смысла...
svesve, конечно это не эталон программирования, но вполне работоспособная реализация.
|
|
|

19.01.2009, 13:08
|
|
Постоянный
Регистрация: 15.06.2007
Сообщений: 527
Провел на форуме: 1734541
Репутация:
214
|
|
svesve, конечно это не эталон программирования, но вполне работоспособная реализация.
Ну на то этот раздел и есть )) учусь учусь учусь ))
спс за инфу,будем размышлять.
|
|
|

19.01.2009, 15:33
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
А откуда берутся эти:
$attachpath
$name"
|
|
|

19.01.2009, 15:49
|
|
Участник форума
Регистрация: 17.02.2006
Сообщений: 189
Провел на форуме: 2406659
Репутация:
34
|
|
Сообщение от Pashkela
А откуда берутся эти:
$attachpath
$name"
я это потом посмотрю,ю
один вопрос если в линк есть знак " & "
может из за этого не сработать линк?
|
|
|

19.01.2009, 15:53
|
|
Постоянный
Регистрация: 21.08.2008
Сообщений: 302
Провел на форуме: 458686
Репутация:
-25
|
|
Сообщение от 1SeTh
я это потом посмотрю,ю
один вопрос если в линк есть знак " & "
может из за этого не сработать линк?
нет в ачате срабатывает же 
http://forum.antichat.ru/editpost.php?do=editpost &p=1067230
Последний раз редактировалось geforce; 19.01.2009 в 16:04..
|
|
|

20.01.2009, 19:03
|
|
Участник форума
Регистрация: 17.02.2006
Сообщений: 189
Провел на форуме: 2406659
Репутация:
34
|
|
Сообщение от geforce
нет в ачате срабатывает же 
http://forum.antichat.ru/editpost.php?do=editpost &p=1067230
я не это имел ввиду, в самом названии аттачмента есть знак амперсанда когда тыкаешь на линк то получается что то вроде этого
download.php?name=blablabbla&blabla.zip
и выходить ошибка
Warning: filesize() [function.filesize]: stat failed for D:\htdocs\website\attachment\blablabbla in D:\htdocs\website\downloadfile.php on line 14
Warning: readfile(D:\htdocs\website\attachment\blablabbla) [function.readfile]: failed to open stream: No such file or directory in D:\htdocs\website\downloadfile.php on line 16
как видите когда полный путь к директории выходить то линк выхоидть не полностью после знака амперсанда режется
должно было быть
D:\htdocs\website\attachment\blablabbla&blabla.zip
а выходить с ошибкой
D:\htdocs\website\attachment\blablabbla
|
|
|

19.01.2009, 15:39
|
|
Новичок
Регистрация: 17.06.2008
Сообщений: 10
Провел на форуме: 137065
Репутация:
4
|
|
Привет, у меня вопрос.
как реализоватть на php потоковое видео, как бы тв эфир, или как можно с другого тв канала перетранслировать поток на свой сайт..
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|