[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Уровни доступа
gross
Здравствуйте,
на сайте есть каталог товаров с несколькими уровнями вложенности:
- каталог 1
-- каталог 1.1
--- каталог 1.1.1
-- каталог 1.2
-- каталог 1.3
- каталог 2
-- каталог 2.1
-- каталог 2.2

У каждого каталога есть есть несколько, на выбор, уровней доступа:
1) все пользователи
2) только создатель
3) все кроме...[выбор пользователей]
4) некоторые пользователи...[выбор пользователей]

Для каждого каталога в базе сделал поля:
1) Тип прав, с вариантами: all, i, all_except, some
2) Выбранные пользователи, если тип прав выбран all_except или some, то здесь перечисляем их id

Запрос вывода всех каталогов второго уровня вложенности к базе делаю такой:
->where("((projects.creator_id = $id)
OR (projects.perm_type_view = 'all')
OR (projects.perm_type_view = 'some' AND projects.select_users_view LIKE '%\"$id\"%')
OR (projects.perm_type_view = 'all_except' AND projects.select_users_view NOT LIKE '%\"$id\"%')

Проблема заключается:
если у "каталог 1" уровень доступа ограничен только создателем, а каталогу 1.1 присвоен уровень доступа "все пользователи", то мой запрос к базе отобразит мне "каталог 1.1", а я хочу чтоб запрос проверял родителя, т. е. "каталог 1", есть ли у меня и к нему тоже.
Кто то встречался с подобными проблемами?


123456
Делай запрос к родителю. Эм...
stump
Можно получать вложенные каталоги только в том случае, если к каталогам первого уровня доступ разрешен.

_____________
Трус не играет в хокей
gross
Сделал вот так для каталога низшего уровня (3):

->where("(
(groups.creator_id = $id) OR ($id = '0') OR
(
(
(groups.perm_type_view = 'all')
OR (groups.perm_type_view = 'some' AND groups.select_users_view LIKE '%
\"$id\"%')
OR (groups.perm_type_view = 'all_except' AND groups.select_users_view NOT LIKE '%
\"$id\"%')
)
AND
(
(projects.perm_type_view = 'all')
OR (projects.perm_type_view = 'some' AND projects.select_users_view LIKE '%
\"$id\"%')
OR (projects.perm_type_view = 'all_except' AND projects.select_users_view NOT LIKE '%
\"$id\"%')
)
AND
(
(objects.creator_id = $id
OR objects.perm_type_view = 'all')
OR (objects.perm_type_view = 'some' AND objects.select_users_view LIKE '%
\"$id\"%')
OR (objects.perm_type_view = 'all_except' AND objects.select_users_view NOT LIKE '%
\"$id\"%')
)
)
)"
)

здесь:
objects - каталог родитель
projects - каталог сын
groups - каталог внук

вроде работает, но не до конца понимаю, почему)
у родителя все понятно, пробегаемся по каждой строчке...определяем права, но у сына, как скрип определяет, относится ли данный сын именно к тому родителю, который сейчас рассматривается
Valick
gross, боюсь вы слабо себе представляете, что такое реляционная модель БД
начинать работу с нарушения первого закона нормализации очень плохая идея

_____________
Стимулятор ~yoomoney - 41001303250491
gross
да, к сожалению, у меня нет образования в этой сфере, пытаюсь разбираться...

таблицы с каталогами у меня составлены по реляционной модели, с ключами
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.