powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Проектирование базы данных
25 сообщений из 69, страница 1 из 3
Проектирование базы данных
    #38254455
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

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

При разговоре с заказчиками решили, что будет четыре типа пользователей:

Администратор, Методист, Учитель, Ученик.

Соответственно, Администратор может все.

Методист может работать только с учебным планом и общей успеваемостью.

Учитель может создавать занятия и сохранять результаты проведения занятий в общую ведомость успеваемости.


Я решил пойти в лоб, так сказать, и сделал 5 таблиц: users (хранит идентификатор пользователя и ФИО), administrators(ссылается на users по первичному ключу user_id, который является и внешним, хранит дополнительную информацию какую-то об администраторах), methodists (аналогично связывается с таблицей users и хранит какие-то свои поля), teachers(та же история с users и снова свои поля) и, наконец, students(такая же связь с users и свои поля).


Теперь проблема сохранения данных о пользователях решена. Нужно теперь решить проблему с контролем доступа.
Не могу никак применить сюда RBAC на эту модель.

Наведите на мысль, пожалуйста.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254537
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В подобных случаях я создаю класс, например SecurityContext, где содержится вся инфа о данном пользователе, не только его роль, но и сделанные юзером настройки, думаю, реализация такого класса не составит для вас труда.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254545
scymaksНаведите на мысль, пожалуйста.

1) Взять готовое решение отсюда http://obr.1c.ru/catalog.jsp?top=-1&type=2&aux=-1

2) Или попробовать готовое решение из п.1) тупо попытаться скопировать в свое "поделие", потерять год, так ничего и не сделать, в конечном счете вернуться на п.1
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254552
users и user_type
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Одна таблица users, одно из полей которой ссылается на таблицу user_type, в которой записи: Администратор, Методист и т.д. и поля обозначающие наличие того или иного гранта.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254554
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1C? Какой ужас, эта компания еще не написали и строки кода, за которую ее уважать стоит. Вот действительно поделие-то.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254661
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проясним ситуац,

я не разрабатываю столь крупную систему.

Вы перегибаете.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254672
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После входа пользователя сохраняй его права в глобальную переменную.
В дальнейшем проверяй в ней есть ли право на конкретную операцию.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254920
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksЯ решил пойти в лоб, так сказать, и сделал 5 таблиц: users (хранит идентификатор пользователя и ФИО), administrators(ссылается на users по первичному ключу user_id, который является и внешним, хранит дополнительную информацию какую-то об администраторах), methodists (аналогично связывается с таблицей users и хранит какие-то свои поля), teachers(та же история с users и снова свои поля) и, наконец, students(такая же связь с users и свои поля).


Теперь проблема сохранения данных о пользователях решена. Проблема не решена. Проблема создана. А ваших заказчиков уже жалко

Пока не поздно, прислушайтесь к совету:
users и user_typeОдна таблица users, одно из полей которой ссылается на таблицу user_type, в которой записи: Администратор, Методист и т.д. и поля обозначающие наличие того или иного гранта.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254993
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimber,

как быть с тем, что скажем у пользователя студента нет логина, а у администртора на есть?
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255315
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПосле входа пользователя сохраняй его права в глобальную переменную.
В дальнейшем проверяй в ней есть ли право на конкретную операцию.Неправильный подход
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255324
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaks, ты плохо разобрался с абстрактными сущностями приложения, пользователи, администраторы, методисты и пр., это все одна сущность - юзеры, их роли - другая, и третья - UserRoles - там ты будешь хранить роли пользователей.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255701
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skole,

Я себе понимаю это так:

Есть users (любой тип юзеров имеет запись здесь)
| - > administrators (содержит поля, специфичные для администраторов)
| - > teachers (содержит поля, специфичные для учителей)
| - > students (содержит поля, специфичные для студентов)

Есть таблица roles (хранит определение ролей)
| - > ADMINISTRATOR_ROLE (роль администратора)
| - > TEACHER_ROLE (роль учителя)
| - > STUDENT_ROLE (роль ученика)

Есть таблица users_to_roles (хранит связь пользователей с ролями)
(id, user_id, role_id)

Я что-то не так понимаю?
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255758
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksЯ что-то не так понимаю? http://ru.wikipedia.org/wiki/Вторая_нормальная_форма
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255773
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С одной стороны все так. Схема которую ты предлагаешь - будет работать. Но она перегружена. В твоем случае хватит и пяти таблиц:
Список пользователей с общей информацией (типа полного имени, пароля, и тп) и четыре ролевых таблицы: список администраторов, методистов, учителей и учеников. При этом отдельной таблицы с ролями и таблицы соответствий пользователь-роль не нужны.


Обычно хватает трех таблиц:
- список пользователей
- список возможных ролей
- список соответствий пользователь-роль
Плюс этой схемы по сравнению с много-табличной - можно легко создавать новые роли (просто добавить строку в список ролей и все). А в случае роль-таблица - надо будет создавать новую таблицу.
Но собственно функциональных отличий между традиционной схемой и твоей нет. Если тебя не смущает что в будущем для ролей "директор" или "завуч" придется создавать новые таблицы, а для удаления ненужных ролей удалять таблицы.... то вперед.

Ни у традиционалисты будут тебя материть за изобретение велосипеда.


Решение с одной таблицей - список пользователей с флагами принадлежности к ролям (как предлагал некто безымянный 14284940 ) тоже может существовать. Оно чуть проще, но по существу не отличается от твоего. В этой схеме список ролей жестко задан изначально и если понадобиться добавить новую роль или убрать старую - надо будет менять таблицу.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255777
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

ну а где я ее нарушаю?
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255796
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksскажем у пользователя студента нет логина, а у администртора на есть?Если пишется БД - то у любого пользователя есть логин. Хотя бы - Guest. И нужно просто понимать, что "пустой" логин (даже если вы додумаетесь использовать такое) - это тоже информация...


Далее, по предыдущему посту:

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

Есть таблица Users (здесь прописаны все пользователи), в ней поля
id
name
..другие поля

Есть таблица Types (здесь прописаны возможные типы пользователей (Методист и т.п.), они же в вашем понимании - "роли"), в ней поля
id
name
..другие поля

Есть таблица UsersTypes (здесь прописаны роли конкретных пользователей - зачем? затем, что один пользователь может иметь и несколько ролей), в ней поля
idUser (<->Users.Id)
idType (<->Types.Id)

Есть таблица Rights (здесь прописаны права на действия в программе),
id
name
..другие поля

Есть таблица RightsTypes (здесь прописаны соответствия между типами (ролями) и правами пользователей), в ней поля
idUserType (<-> UserTypes.Id)
idRight (<-> Rights.Id)

Когда вы создаете/модифицируете пользователя - вы прописываете его самого в Users, а его возможные "роли" - в UsersTypes. Когда вы создаете/модифицируете "роль" - вы прописываете её тип в Types, а "права" - в RightsTypes. А таблица Rights - это внутренняя таблица самой базы, она создается и модифицируется разработчиком (который и продумывает межанизм реализации прав доступа). А слова "Администратор", "Методист" и т.д. - это просто текстовые строки в поле UserTypes.Name...

Где-то так, для начала...
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255802
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЕсли тебя не смущает что в будущем для ролей "директор" или "завуч" придется создавать новые таблицы, а для удаления ненужных ролей удалять таблицы.... то вперед.

Ни у традиционалисты будут тебя материть за изобретение велосипеда.Пока набирал - пропустил пост
И да будем материть - ибо в этом случае Оккам своим серпом по одному месту... ну вы поняли...
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255829
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksrockclimber,

как быть с тем, что скажем у пользователя студента нет логина, а у администртора на есть?А в чем проблема? Проблема будет, когда заказчик полгода спустя скажет - а давайте сделаем логины студентам, пусть расписание сами узнают! И вы еще раз сделаете то, что уже делали по отдельности для администраторов, методистов и учителей.
Вместо того, чтобы сделать один раз для всех и забыть.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255837
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM, ++
Только правила доступа здесь не нужны, это делается на уровне приложения, то есть по умолчанию доступа нет ни у кого, но на уровне приложения открываешь доступ для админа - удалять, для методиста редактировать.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255845
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksну а где я ее нарушаю? Нарушений нет. Есть небольшая избыточность.
Можно сократить до двух таблиц:

Модератор: Вложение удалено.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255850
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновил
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255851
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255852
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimberscymaksrockclimber,

как быть с тем, что скажем у пользователя студента нет логина, а у администртора на есть?А в чем проблема? Проблема будет, когда заказчик полгода спустя скажет - а давайте сделаем логины студентам, пусть расписание сами узнают! И вы еще раз сделаете то, что уже делали по отдельности для администраторов, методистов и учителей.
Вместо того, чтобы сделать один раз для всех и забыть.Вы оба путаете наличие логинов с обязательностью паролей.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255857
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skoleAndreTM, ++
Только правила доступа здесь не нужны, это делается на уровне приложения, то есть по умолчанию доступа нет ни у кого, но на уровне приложения открываешь доступ для админа - удалять, для методиста редактировать.Вот за это "на уровне приложения" - убивать на месте.
У Васи версия клиента номер 1, он может будучи учеником может править урок. Ну баг там был в приложении. Ты обнаружил баг, исправил его и выпустил версию приложения номер 2. Счастье? А фиг! Вася зная о баге не стал обновлять свое приложение и спокойно правит уроки.
А директор школы сказал: "а почему это методист не может создавать уроки? Дайте ему доступ" и начнешь ты опять править приложение а потом распространять его...
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255859
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanОбновилВроде-бы, кто-то, не так давно, намекал что TC нарушает принципы нормализации.
Не помнишь кто это был?
...
Рейтинг: 0 / 0
25 сообщений из 69, страница 1 из 3
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Проектирование базы данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]