|
|
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
Добрый день! Я создаю небольшую программку, которая будет использоваться в частных школах. При разговоре с заказчиками решили, что будет четыре типа пользователей: Администратор, Методист, Учитель, Ученик. Соответственно, Администратор может все. Методист может работать только с учебным планом и общей успеваемостью. Учитель может создавать занятия и сохранять результаты проведения занятий в общую ведомость успеваемости. Я решил пойти в лоб, так сказать, и сделал 5 таблиц: users (хранит идентификатор пользователя и ФИО), administrators(ссылается на users по первичному ключу user_id, который является и внешним, хранит дополнительную информацию какую-то об администраторах), methodists (аналогично связывается с таблицей users и хранит какие-то свои поля), teachers(та же история с users и снова свои поля) и, наконец, students(такая же связь с users и свои поля). Теперь проблема сохранения данных о пользователях решена. Нужно теперь решить проблему с контролем доступа. Не могу никак применить сюда RBAC на эту модель. Наведите на мысль, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2013, 19:47 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
В подобных случаях я создаю класс, например SecurityContext, где содержится вся инфа о данном пользователе, не только его роль, но и сделанные юзером настройки, думаю, реализация такого класса не составит для вас труда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2013, 22:23 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
scymaksНаведите на мысль, пожалуйста. 1) Взять готовое решение отсюда http://obr.1c.ru/catalog.jsp?top=-1&type=2&aux=-1 2) Или попробовать готовое решение из п.1) тупо попытаться скопировать в свое "поделие", потерять год, так ничего и не сделать, в конечном счете вернуться на п.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2013, 22:42 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
Одна таблица users, одно из полей которой ссылается на таблицу user_type, в которой записи: Администратор, Методист и т.д. и поля обозначающие наличие того или иного гранта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2013, 22:59 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
1C? Какой ужас, эта компания еще не написали и строки кода, за которую ее уважать стоит. Вот действительно поделие-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2013, 23:00 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
Проясним ситуац, я не разрабатываю столь крупную систему. Вы перегибаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 06:01 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
После входа пользователя сохраняй его права в глобальную переменную. В дальнейшем проверяй в ней есть ли право на конкретную операцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 06:49 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
scymaksЯ решил пойти в лоб, так сказать, и сделал 5 таблиц: users (хранит идентификатор пользователя и ФИО), administrators(ссылается на users по первичному ключу user_id, который является и внешним, хранит дополнительную информацию какую-то об администраторах), methodists (аналогично связывается с таблицей users и хранит какие-то свои поля), teachers(та же история с users и снова свои поля) и, наконец, students(такая же связь с users и свои поля). Теперь проблема сохранения данных о пользователях решена. Проблема не решена. Проблема создана. А ваших заказчиков уже жалко Пока не поздно, прислушайтесь к совету: users и user_typeОдна таблица users, одно из полей которой ссылается на таблицу user_type, в которой записи: Администратор, Методист и т.д. и поля обозначающие наличие того или иного гранта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 11:11 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
rockclimber, как быть с тем, что скажем у пользователя студента нет логина, а у администртора на есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 11:49 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
Dima TПосле входа пользователя сохраняй его права в глобальную переменную. В дальнейшем проверяй в ней есть ли право на конкретную операцию.Неправильный подход ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 15:04 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
scymaks, ты плохо разобрался с абстрактными сущностями приложения, пользователи, администраторы, методисты и пр., это все одна сущность - юзеры, их роли - другая, и третья - UserRoles - там ты будешь хранить роли пользователей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 15:09 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
skole, Я себе понимаю это так: Есть users (любой тип юзеров имеет запись здесь) | - > administrators (содержит поля, специфичные для администраторов) | - > teachers (содержит поля, специфичные для учителей) | - > students (содержит поля, специфичные для студентов) Есть таблица roles (хранит определение ролей) | - > ADMINISTRATOR_ROLE (роль администратора) | - > TEACHER_ROLE (роль учителя) | - > STUDENT_ROLE (роль ученика) Есть таблица users_to_roles (хранит связь пользователей с ролями) (id, user_id, role_id) Я что-то не так понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 19:37 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
scymaksЯ что-то не так понимаю? http://ru.wikipedia.org/wiki/Вторая_нормальная_форма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 20:30 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
С одной стороны все так. Схема которую ты предлагаешь - будет работать. Но она перегружена. В твоем случае хватит и пяти таблиц: Список пользователей с общей информацией (типа полного имени, пароля, и тп) и четыре ролевых таблицы: список администраторов, методистов, учителей и учеников. При этом отдельной таблицы с ролями и таблицы соответствий пользователь-роль не нужны. Обычно хватает трех таблиц: - список пользователей - список возможных ролей - список соответствий пользователь-роль Плюс этой схемы по сравнению с много-табличной - можно легко создавать новые роли (просто добавить строку в список ролей и все). А в случае роль-таблица - надо будет создавать новую таблицу. Но собственно функциональных отличий между традиционной схемой и твоей нет. Если тебя не смущает что в будущем для ролей "директор" или "завуч" придется создавать новые таблицы, а для удаления ненужных ролей удалять таблицы.... то вперед. Ни у традиционалисты будут тебя материть за изобретение велосипеда. Решение с одной таблицей - список пользователей с флагами принадлежности к ролям (как предлагал некто безымянный 14284940 ) тоже может существовать. Оно чуть проще, но по существу не отличается от твоего. В этой схеме список ролей жестко задан изначально и если понадобиться добавить новую роль или убрать старую - надо будет менять таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 20:50 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
Usman, ну а где я ее нарушаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 20:52 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
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... Где-то так, для начала... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 21:08 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
White OwlЕсли тебя не смущает что в будущем для ролей "директор" или "завуч" придется создавать новые таблицы, а для удаления ненужных ролей удалять таблицы.... то вперед. Ни у традиционалисты будут тебя материть за изобретение велосипеда.Пока набирал - пропустил пост И да будем материть - ибо в этом случае Оккам своим серпом по одному месту... ну вы поняли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 21:18 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
scymaksrockclimber, как быть с тем, что скажем у пользователя студента нет логина, а у администртора на есть?А в чем проблема? Проблема будет, когда заказчик полгода спустя скажет - а давайте сделаем логины студентам, пусть расписание сами узнают! И вы еще раз сделаете то, что уже делали по отдельности для администраторов, методистов и учителей. Вместо того, чтобы сделать один раз для всех и забыть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 21:51 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
AndreTM, ++ Только правила доступа здесь не нужны, это делается на уровне приложения, то есть по умолчанию доступа нет ни у кого, но на уровне приложения открываешь доступ для админа - удалять, для методиста редактировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 22:03 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
scymaksну а где я ее нарушаю? Нарушений нет. Есть небольшая избыточность. Можно сократить до двух таблиц: Модератор: Вложение удалено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 22:14 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
Обновил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 22:17 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
rockclimberscymaksrockclimber, как быть с тем, что скажем у пользователя студента нет логина, а у администртора на есть?А в чем проблема? Проблема будет, когда заказчик полгода спустя скажет - а давайте сделаем логины студентам, пусть расписание сами узнают! И вы еще раз сделаете то, что уже делали по отдельности для администраторов, методистов и учителей. Вместо того, чтобы сделать один раз для всех и забыть.Вы оба путаете наличие логинов с обязательностью паролей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 22:24 |
|
||
|
Проектирование базы данных
|
|||
|---|---|---|---|
|
#18+
skoleAndreTM, ++ Только правила доступа здесь не нужны, это делается на уровне приложения, то есть по умолчанию доступа нет ни у кого, но на уровне приложения открываешь доступ для админа - удалять, для методиста редактировать.Вот за это "на уровне приложения" - убивать на месте. У Васи версия клиента номер 1, он может будучи учеником может править урок. Ну баг там был в приложении. Ты обнаружил баг, исправил его и выпустил версию приложения номер 2. Счастье? А фиг! Вася зная о баге не стал обновлять свое приложение и спокойно правит уроки. А директор школы сказал: "а почему это методист не может создавать уроки? Дайте ему доступ" и начнешь ты опять править приложение а потом распространять его... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2013, 22:34 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38255845&tid=1341793]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
157ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 456ms |

| 0 / 0 |
