Хранение доступа пользователей к страницам в MYSQL

Приветствую всех, кто заинтересовался таким вопросом и попал сюда!

Решил я несколько лет назад помочь своим сотрудникам хранить и удобно использовать всяческую информацию и выбор пал на создание специального сайта, крутящегося внутри сети учреждения на OpenServer.

Идея была в следующем:

Каждый пользователь входил на сайт под своим логином и паролем. В зависимости от необходимости залогиненому пользователю выдавалось меню со ссылками на модули (страницы), где пользователь тихо и мирно вносил некую информацию, мог делать выборки, сортировки и т.п., впоследствии составлять для себя определенные отчеты и успешно печатать это всё.

Сразу оговорюсь, что времени на продумывание структуры базы данных и особенно "обойтись без говнокода" не было, поэтому всё происходило на коленке, долго не задумываясь, часто допиливая уже в продакшене.

Однако практически первое Но, с которым я столкнулся это какие вообще есть способы хранения доступа пользователей в БД MYSQL? Как это реализовывалось под капотом? Ну так вот первое к чему я пришёл это хранение в таблице пользователей в текстовом поле записей типа "1,3,8,45,", что означало - какие ID модулей доступны конретному пользователю. Таким образом пользователь логинился, сайт на основе записей пользователя выдавал ссылки только на те страницы, которые были юзеру разрешены.

Теперь настал момент переписать приложение по-нормальному, и снова этот вопрос, какие еще варианты есть хранения в базе данных доступа к страницам, если "ну допустим" количество этих страниц "стремится в бесконечность", как и количество пользователей?

Вы смотрите срез комментариев. Показать все
1
Автор поста оценил этот комментарий

хранишь строки вида user_id, module_id

для пользователя вытаскиваешь все строки, получаешь все модули, куда у него есть доступ

либо в конкретном модуле ищешь строку с модулем и пользователем, проверяешь, есть ли доступ

кстати, хранить у пользователя json-строку со списком модулей тоже норм

раскрыть ветку (3)
0
Автор поста оценил этот комментарий

Спасибо! Да именно так я и вывожу ссылки на модули с помощью такого запроса:

SELECT form_id, form_description FROM forms, users WHERE users.id = $session_id AND FIND_IN_SET(forms.form_id, users.access) ORDER BY form_id, где в поле access как раз записи вида "1,3,8,45,". Само поле имеет тип varchar(100). Однако я почему и спрашиваю не приведет ли запрос с FIND_IN_SET к деградации скорости выборки, если кол-во модулей достигнет большого количества. Опять же увеличивать поле varchar нужно будет постоянно, а хотелось бы, чтобы БД хранила именно столько бит инфы сколько туда попало. В общем было какое-то подозрение что что-то я делаю не так. А может я и заморачиваюсь.

раскрыть ветку (2)
0
Автор поста оценил этот комментарий

в mysql, вроде, появилось поле типа json. Лучше его использовать

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ок, спасибо, тоже думал в эту сторону, пока изучаю про json в mysql

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку