Покинул форум
Сообщений всего: 48
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
Здравствуйте. Есть группы пользователей и несколько администраторов, как распределить права доступа между администраторами.
Group1, Group2, Group3, Group4, Group5 – superadmin
Group1, Group2, Group3 – admin
Group1 - admingroup1
EuGen
Отправлено: 16 Июня, 2010 - 16:32:01
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Ничего не понял, попробуйте еще раз
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
tramX
Отправлено: 16 Июня, 2010 - 16:45:52
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
Cушествует например 10 пользователе.
Us1
Us2
Us3
Us4
Принадлежат к группе group1
Us5
Us6
Us7
Us8
Принадлежат к группе group2
Us9
Us10
Принадлежат к группе group3
Есть три администратора.
1. Superadmin – ему нужна дать все права, чтобы он мог видеть пользователей из всех групп.
2. admin – ему нужно дать доступ только к пользователям из group2, group3.
3. admingroup3 – дать доступ только к пользователям из группы group3
Jlblcblu
Отправлено: 17 Июня, 2010 - 00:13:57
Новичок
Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2010
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
tramX пишет:
Есть группы пользователей и несколько администраторов, как распределить права доступа между администраторами.
Если вы имеете в виду SQL-пользователей то это не такая простая задача - дело в том что по умолчанию не предусмотрено каскадное выставление прав пользователей и управление ими - то есть если определенный пользователь имеет права GRANT/REVOKE то он может устанавливать любые права любом пользователям
Как вариаент обхода можно создать SQL-функцмю принадлежащую административному пользователю - которую могут изменять только администраторы и выполнять может каждый - и внутрии нее проверяется текущий пользователь и с помощью таблицы mysql ему могут выдаваться определенные поля
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
tramX
Отправлено: 17 Июня, 2010 - 23:33:45
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
Я вот как подумал. При создании группы в таблицу group в поле accetp заносим id администратора которому разрешён доступ к группе.
Таблица будет такого вида
id name accept
1 group1 1
2 group2 1,2
3 group3 1,2,3
С помощью сессии есть id администратора
При выводе списка групп на которые есть права, формируется запрос
SELECT name FROM group WHERE accept=$id;
Только не получаю вывода там где запятые в поле accept. Может в MySQL есть какой то оператор позволяющийделать такие выборки?
JustUserR
Отправлено: 18 Июня, 2010 - 13:03:37
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
tramX пишет:
Только не получаю вывода там где запятые в поле accept
Выражение с запятиыми является в вашем случае обычной сторокой - и поэтому для проверки с помощью SQL-средств можно в общем случае использовать оператор LIKE - только учтите что он ищет подстроки и поэтому при поиске группы 2 к примеру группа 12 также будет учтена По этой причине можете сделать специальные ограничители - например данные в поле начинаются и занкачинаются специальным символом типа X,1,2,3,X - и тогда можнл делать точную проверку с помощью LIKE ,$group, то есть с указанем полной подстроки
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
tramX
Отправлено: 03 Июля, 2010 - 22:43:04
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
С выборкой разобрался. Как добавлять новые значения?
JustUserR
Отправлено: 04 Июля, 2010 - 02:30:40
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
tramX пишет:
С выборкой разобрался. Как добавлять новые значения?
Если вы используете приведенную выше структуры данных для хранения набора значений прав доступа - то можете реализовать обновление соответствующего SQL-поля с использованием встроенных строковых функций В частности вы сначала выбираете нужную строку по ключевому полю и считываете список прав доступа - после чего функцией SUBSTR выбираете значение до последнего ,X и конкатенируете туда новое значение - после чего записываете измененное поле в UPDATE-запросе Аналогичным образом выполняется и удалением прав доступа из соответствующего списка
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
tramX
Отправлено: 17 Августа, 2010 - 17:42:40
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
А пример можно?
JustUserR
Отправлено: 17 Августа, 2010 - 23:37:40
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
tramX пишет:
А пример можно?
Для добавления информации о новых пользователях в группе с их правами и внутренними прявязками в вашу структуру данных - можно выполнить SQL-запрос который будет запрашить строку заданной группы и модифицировать инфорацию о входящих в нее пользователях путем модификации строки и расстановки ограничителей - при этом использовать дополнительное шифрование или экранироване не требуется так как все идентификаторы представляют собой числовые значения
Таким образом для добавления нового пользователя в группу можно использовать примерно такой SQL-запрос - в нем необходимо указать значение CHANGE_ID как инентификаор изменямой группы и NEW_VALUE как новая добавляемая привелегия
UPDATE groups SET accept=SUBSTR(accept,0,(STELEN(accept)-1))+"NEW_VALUE"+",X" WHERE ID="CHANGE_ID"
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
tramX
Отправлено: 18 Августа, 2010 - 16:34:25
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
Я запутался. Есть таблица users, в которой есть поле admins. В этом поле должны перечисляться администраторы. Мне нужно добавлять администраторов в это поле. Но перед тем как добавить нужно сделать проверку есть ли такой администратор или нет. Как это реализовать?
Uchkuma
Отправлено: 18 Августа, 2010 - 17:28:21
Участник
Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010 Откуда: Киров
Помог: 6 раз(а)
tramX, проверку можно сделать дополнительным или вложенным запросом. Если хотите, чтобы по полю 'admins' в бд гарантированно не было дубликатов, присвойте данному полю индекс типа 'UNIQUE'.
JustUserR
Отправлено: 18 Августа, 2010 - 22:10:34
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
tramX Для проверки наличия администратора с некоторым идентификатором в указаной группе можно использовать вложенный запрос - конкретно вы осуществляете выборку SELECT по ранее указанное схеме с целью получить число строк с помощью оператора COUNT которые соответствуют требуемому условию - и далее вы можете сделать проверку значения возвращенного внутренним запросом на равентсво нулю и в зависимости от этого выполнять добавление
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
tramX
Отправлено: 18 Августа, 2010 - 22:16:57
Новичок
Покинул форум
Сообщений всего: 48
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
Можно же и без COUNT ?
$adm = mysql_query("SELECT id FROM users WHERE admins LIKE '%petya%'");
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.