Права пользователей

Gluk

Новичок
Права пользователей

Мне надо написать скрипт редактирования страниц, настроек сайта и т.д. Только чтобы определенные пользователи или группы имели доступ к определенному пункту...
может кто нибудь сталкивался, поделитесь плиз!
как эти данные о правах пользователей лучше хранить в базе данных и как потом проверять есть ли право или нет?
 

Romantik

TeaM PHPClub
Лучше в базе хранить число, которое при проверке побитово раскладывать и проверять 0- нет доступа, 1-есть, где разряд соответсвует операции.
 

Gluk

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

Yurik

/dev/null
Я делал не так. Когда дело касается страниц сайта, которые хранятся в дереве, то я делал так

tblrights
------------
id
iduser
idnode

Право на idnode означает право на все дочерние ноды.

при попытке редактирования определенного idnode проходишься по дереву до корня. Если на пути попадется idnode, который есть в табле tblrights, значит разрешено редактировать.
Если достигли верхнего уровня и не было разрешения, значит пишем "нельзя".

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

Gluk

Новичок
но ведь не только страниц несколько, но и пользователей :)
 

Yurik

/dev/null
понятное дело. по дефолту юзер не имеет никаких прав, пока ему их не вручат.
Если нужно, то можно на некоторые ноды дать "права по умолчанию", но зачем?
 

Serjoza

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

Gluk

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

tooff

Guest
прямо как в Юникс :)
нет, ну можно по-моему дать права группе, и апдейтить соответствующую таблицу при их изменении, дать пользователям статус в группе, например 1, 2, 3.... и тоже нет проблем если у кого-то статус изменится, изменить его в таблице

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

Если нелья всех поделить на статусы четко, то тяжело тебе придется
Придется так:
if ($user = "Ivanov") or ($user = "Petrov")

потом новые OR раз в неделю добавлять :))


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

Gluk

Новичок
я сделал так:
создал таблицу users
CREATE TABLE users (
ID int(11) NOT NULL auto_increment,
Parent int(11) NOT NULL default '0',
Type enum('group','admin','user') NOT NULL default 'group',
Name varchar(255) NOT NULL default '',
Passwd varchar(255) NOT NULL default '',
Lock enum('on') default NULL,
Desc varchar(255) NOT NULL default '',
KEY ID (ID)
) TYPE=MyISAM COMMENT='Пользователи';

где ID - идентификатор, Parent - к какой группе относится (если это пользователь), Type - админ, группа или пользователь, Name - имя группы или ник пользователя, Passwd - пароль (если пользователь), Lock - (это мне надо) заблокирована группа или пользователь (т.е. может ли входить в систему), Desc - просто дополнительное поле (может быть описанием группы или email пользователя)

и создал таблицу rights

CREATE TABLE rights (
ID int(11) NOT NULL default '0',
Parent int(11) NOT NULL default '0',
Edit enum('on') default NULL,
Del enum('on') default NULL,
Ren enum('on') default NULL,
Pub enum('on') default NULL,
KEY ID (ID)
) TYPE=MyISAM;

где ID - идентификатор пользователя или группы = users.ID
Edit, Del, Ren, Pub - права (может/не может)
Parent - идентификатор страницы или модуля права к которому надо проверить

а дальше проверять - дело техники...

у кого есть предложения по оптимизации, буду благодарен :rolleyes:
 

sergo_stavropol

Guest
где ID - идентификатор, Parent - к какой группе относится (если это пользователь), Type - админ, группа или пользователь,
непонятно про Type
если это таблица users, то и так понятно что это пользователь из группы PARENT-ID
то поле явно лишнее, или же я чего-то не понял
сначала скажи что ты понимаешь под группой

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

sergo_stavropol

Guest
вообще если права - это реадктирование - чтение, то ты счастливчик :)
у меня именно досутп к определнным старницам обычных (чтение) пользователей
 

Gluk

Новичок
а Type там, чтобы у пользователей и групп ID были по порядку, чтобы в Rights выбирать по этому ID, чтоб они не
повторялись...
поэтому я решил в одну таблицу записывать и пользователей и группы

я понятно выразился? :)
 
Сверху