Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Определение видимости данных для пользователей

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: на уровне таблицы
b0lsh0i_b0ber
Отправлено: 29 Сентября, 2011 - 17:51:31
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Подскажите как лучше реализовать архитектуру! Вот например есть таблица с пользователями users и таблица с заказами orders. Когда пользователь из таблицы users принимает заказ из таблицы orders, то к записи заказа в специально отведенное поле, записывается идентификатор пользователя в виде его имени. Вот теперь вопрос, как разделить права на видимость взятых заказов!? Вот например чтобы пользователь мог видеть заказы из таблицы только с его идентификатором и не видеть заказы других пользователей?
запрос должен выглядеть в стиле where id=name? и как сделать чтобы при обращении к orders запрос определил значение name из таблицы users?

Спасибо всем откликнувшимся!
 
 Top
MrBeard
Отправлено: 29 Сентября, 2011 - 18:16:05
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




Цитата:
запрос должен выглядеть в стиле where id=name? и как сделать чтобы при обращении к orders запрос определил значение name из таблицы users?

в таблицу orders нужно записывать не идентификатор в виде имени, а идентификатор в виде primary key из таблицы users(хотя, может я вас неправильно понял)
запрос, который позволяет определённому пользователю получить только ордеры с его ID действительно выглядит примерно так
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *
  2. FROM orders
  3. WHERE user_id = $userID

получить имя пользователя можно, если присоединить вторую таблицу(хотя зачем оно вам при запросе ордеров по уже известному пользователю - не пойму)) )
выглядеть это будет примерно так -
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT orders.*, users.user_name
  2. FROM orders
  3. JOIN users USING(user_id)
  4. WHERE user_id = $userID
 
 Top
b0lsh0i_b0ber
Отправлено: 29 Сентября, 2011 - 20:02:23
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Благодарю MrBeard, спасибо что не поленились даже привести примеры кода! Ситуация уже намного лучше проясняется! Но вот если рассмотреть чуть чуть по другому принцип взаимодействия: если например пользователи объединены в группу, и каждый юзер из группы может просмотреть все заказы, обработанные группой, то на основании чего различать данные в таблицы? Может есть возможность присвоить некий идентификатор принадлежности пользователя к группе?
 
 Top
MrBeard
Отправлено: 29 Сентября, 2011 - 21:33:47
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




угу. создаётся таблица groups, с идентификаторами и именами групп, если один пользователь может входить только в одну группу, то можно добавить идентификатор группы в таблицу users. если пользователь может входить в несколько групп, то нужна промежуточная таблица, где будет три колонки - id записи, id пользователя и id группы.
Если группа у пользователя может быть одна, то прямо в таблицу orders добавьте поле идентификатора группы. если групп будет несколько - нужно создать дополнительно таблицу, где придётся хранить опять же идентификатор записи, идентификатор ордера и идентификатор группы.
выборка, соответственно, усложнится. ну да не придумаю я варианта лучше))))
пример выборки по id пользователя и его группе при единственно возможной группе вот -
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT orders.*
  2. FROM orders
  3. WHERE user_id = $userID
  4.     OR group_id = $groupID
 
 Top
b0lsh0i_b0ber
Отправлено: 29 Сентября, 2011 - 22:22:13
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




и опять великая вам благодарность! Только вот не до конца пойму, как запрос сравнит данные user id и group id если одни находятся в таблице users?
 
 Top
MrBeard
Отправлено: 29 Сентября, 2011 - 22:26:28
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




ну смотрите, вы начинаете запрос. вы УЖЕ знаете, какой пользователь его задал, не правда ли? как минимум его ID) . если есть ID - ищете по нему группу из таблицы users. если у вас изначально никакой информации о пользователе - то я не знаю, как вы будете фильтровать))
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB