Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   MySQL 3.23. Вывих мозга при создании запроса (http://forum.oszone.net/showthread.php?t=57243)

pauluss 28-11-2005 18:45 378284

MySQL 3.23. Вывих мозга при создании запроса
 
Имею хотение натворить красивость, но не имею мозгов. Надеюсь на Ваши.

Суть: Есть юзера. Есть группы(Роли), в которые можно объединять юзеров. Каждый юзер может входить в любое количество групп или не входить ни в одну. Есть куча файлов. Надо прописать права на файлы для юзеров и/или групп.

Натворил таблицы:

users:
поля: id (primary key)
.................

groups:
поля: id (primary key)
.......

usgr: (связи юзеров и групп)
поля: id_user
id_group

files:
поля: id (primary key)
............................

permit_users: (связи файлов с юзерами. Иными словами права юзеров на файл)
поля: id_user
id_file

permit_groups: (связи файлов с группами. Иными словами права групп юзеров на файл)
поля: id_group
id_file

Вопрос: Как одним запросом по id файла определить доступен ли он данному юзеру? (по id юзера)

vadimiron 29-11-2005 01:12 378361

Цитата:

permit_users: (связи файлов с юзерами. Иными словами права юзеров на файл)
поля: id_user
id_file
У вас же есть для этого спец таблица. В чём вопрос?
SELECT * from permit_users WHERE id_file='$file' AND id_user='$user'

pauluss 29-11-2005 11:55 378439

vadimiron Юзер может состоять в группе, для которой прописаны разрешения в permit_grops. Я выполняю два запроса:

$res=SELECT permit_group.gr FROM permit_group,usergroup WHERE (permit_group.gr=usergroup.gr) AND (permit_group.file=$file_id) AND (usergroup.us=$userid);

$res2=SELECT user FROM permit_user WHERE (user=$userid) AND (file='$fileid);

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

if( (mysql_num_rows($res)+mysql_num_rows($res2))>0 )
echo"разрешен";
else
echo"нафик";

Но мне не нравится. не красиво. Как обойтись одним запросом?

mar 29-11-2005 12:43 378451

например, UNION первого запроса со вторым. можно с группировкой по user_id, чтоб не тащить лишнего

vadimiron 29-11-2005 23:36 378619

Цитата:

Юзер может состоять в группе, для которой прописаны разрешения в permit_grops
То есть отдельно юзеру нет разрешения пользоваться файлом, но группе, в которой он состоит, разрешено, поэтому и юзеру тоже разрешается???

Я не знаю точно поддерживает ли третья ветка вложенные запросы, то можно вложенным

Возможно есть ошибки, так как давно этим не занимался:
PHP код:

SELECT id_user FROM permit_users WHERE id_file='$id_file' OR id_user=(SELECT id_user FROM usgr WHERE id_group=(SELECT id_group FROM permit_groups WHERE id_file='$id_file')) 



Время: 21:52.

Время: 21:52.
© OSzone.net 2001-