У меня есть таблица под названием page
, которая представляет каждую страницу на моем сайте.MySQL: что является лучшим способом создания системы доступа?
page_id | page_subject | page_path
----------------------------------
1 | Foo | /Foo
2 | Bar | /Bar
Я также таблицу с именем group
:
group_id | group_name
---------------------
1 | Users
2 | Admins
Цель: как определить доступ к каждой странице для одной группы? я создать еще одну таблицу - page_group
:
page_group | group_id
---------------------
1 | 1
1 | 2
Таблица содержит группы, которые имеют доступ к странице (page_group
).
Я написал функцию:
CREATE FUNCTION `PAGE_ACCESS`(`pageId` INT, `groupId` MEDIUMINT)
BEGIN
RETURN IF((SELECT COUNT(*) FROM `page_group` WHERE page_id = pageId AND group_id = groupId) > TRUE, FALSE);
END;
Теперь я могу сделать что-то вроде этого:
SELECT *
FROM page
WHERE <conditions> AND PAGE_ACCESS(page_id, <group_id>)
... который возвращает страницы, которые я должен иметь доступ.
Работает нормально, но кажется медленным с рядами> 100 000 Как вы это сделаете? Вы поступили бы по-другому?
Удивительно (для меня), это очень эффективный способ сделать эту проверку - mySQL может оптимизировать эту ситуацию, если у вас хорошие индексы. – Piskvor
Спасибо, я попробую и дам вам знать :) – Bald