Rails: Как реализовать вход в систему и аутентификацию, где у меня есть пять разных пользовательских моделей в rails? - PullRequest
0 голосов
/ 20 июня 2019

Я довольно новичок в рельсах. У меня проблема с проектированием модельных классов. Так что этим приложением будут пользоваться 5 разных пользователей (студенты, преподаватели, руководитель и координатор). Все они являются разными пользователями для входа на сайт и имеют разные функциональные возможности (например, руководитель проводит мероприятие. Студенты регистрируются на мероприятие. Координатор устанавливает, кто может быть руководителем и т. Д.). Я создал все четыре модели с USERNAME и PASSWORD для каждой модели. У меня сейчас нет модели пользователя, потому что пользователи в этом приложении - эти 4 модели. Теперь, когда я делаю страницу входа, мне трудно реализовать лучший способ аутентификации пользователей. Например, если Head вводит свои учетные данные для входа, приложение должно идентифицировать того пользователя, который вошел в систему, как Head. Какой подход будет лучше всего с этим столкнуться?

Кроме того, не выяснив, как к этому подойти. Я думал об использовании Devise и CanCanCan Gem. Но та же проблема возникает, даже если я использую эти драгоценные камни. (Я могу ошибаться)

1 Ответ

2 голосов
/ 20 июня 2019

Не создавайте несколько моделей для разных типов пользователей.Это почти всегда не то, что вы хотите.Вместо этого добавьте столбец с именем role типа enum, который содержит все виды ролей, которые вы хотите добавить, как указал Серхио.Ваш комментарий о наличии слишком большого количества атрибутов в одной модели не является проблемой по сравнению с тем, который вы планируете создать с 5 пользовательскими моделями.

Похоже, вы можете поместить слишком много данных в пользовательскую модель, если этоэто ваша забота

и другие функции (пример: руководитель проводит мероприятие. Студенты регистрируются на событие.

Для этого вам нужна система разрешений, такая как cancancan гдеВы можете указать, к каким функциям веб-сайта имеет доступ каждая роль.

...