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
Форумы портала PHP.SU :: Версия для печати :: Определение видимости данных для пользователей
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Определение видимости данных для пользователей

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

1. b0lsh0i_b0ber - 29 Сентября, 2011 - 17:51:31 - перейти к сообщению
Подскажите как лучше реализовать архитектуру! Вот например есть таблица с пользователями users и таблица с заказами orders. Когда пользователь из таблицы users принимает заказ из таблицы orders, то к записи заказа в специально отведенное поле, записывается идентификатор пользователя в виде его имени. Вот теперь вопрос, как разделить права на видимость взятых заказов!? Вот например чтобы пользователь мог видеть заказы из таблицы только с его идентификатором и не видеть заказы других пользователей?
запрос должен выглядеть в стиле where id=name? и как сделать чтобы при обращении к orders запрос определил значение name из таблицы users?

Спасибо всем откликнувшимся!
2. MrBeard - 29 Сентября, 2011 - 18:16:05 - перейти к сообщению
Цитата:
запрос должен выглядеть в стиле 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
3. b0lsh0i_b0ber - 29 Сентября, 2011 - 20:02:23 - перейти к сообщению
Благодарю MrBeard, спасибо что не поленились даже привести примеры кода! Ситуация уже намного лучше проясняется! Но вот если рассмотреть чуть чуть по другому принцип взаимодействия: если например пользователи объединены в группу, и каждый юзер из группы может просмотреть все заказы, обработанные группой, то на основании чего различать данные в таблицы? Может есть возможность присвоить некий идентификатор принадлежности пользователя к группе?
4. MrBeard - 29 Сентября, 2011 - 21:33:47 - перейти к сообщению
угу. создаётся таблица 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
5. b0lsh0i_b0ber - 29 Сентября, 2011 - 22:22:13 - перейти к сообщению
и опять великая вам благодарность! Только вот не до конца пойму, как запрос сравнит данные user id и group id если одни находятся в таблице users?
6. MrBeard - 29 Сентября, 2011 - 22:26:28 - перейти к сообщению
ну смотрите, вы начинаете запрос. вы УЖЕ знаете, какой пользователь его задал, не правда ли? как минимум его ID) . если есть ID - ищете по нему группу из таблицы users. если у вас изначально никакой информации о пользователе - то я не знаю, как вы будете фильтровать))

 

Powered by ExBB FM 1.0 RC1