PDA

Показать полную графическую версию : MySQL 3.23. Вывих мозга при создании запроса


pauluss
28-11-2005, 18:45
Имею хотение натворить красивость, но не имею мозгов. Надеюсь на Ваши.

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

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

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

pauluss
29-11-2005, 11:55
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
например, UNION первого запроса со вторым. можно с группировкой по user_id, чтоб не тащить лишнего

vadimiron
29-11-2005, 23:36
Юзер может состоять в группе, для которой прописаны разрешения в permit_grops
То есть отдельно юзеру нет разрешения пользоваться файлом, но группе, в которой он состоит, разрешено, поэтому и юзеру тоже разрешается???

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

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

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'))




© OSzone.net 2001-2012