У меня вопрос по дизайну, и я был бы признателен за вдумчивый ответ.
Допустим, у вас есть простое приложение (например, ради), которое имеет модель User, Company и Theme. Компания has_one
Тема и has_many
Пользователи.
Администраторы (пользователь) могут полностью управлять компаниями, пользователями и темами - всем стеком REST, в дополнение к нескольким другим действиям. Предполагается, что администраторы будут делать то же самое со всеми этими тремя ресурсами, чего не могут делать другие роли пользователей.
У нас также есть роль компании. Эта роль может редактировать собственную компанию, а также выбирать тему из тех, которые администратор добавил в качестве хороших значений по умолчанию, или они могут просто создать свою собственную тему.
Компании также могут добавлять / редактировать / удалять пользователей, но только для своей компании. Эти страницы будут иметь разные представления и поведение администраторов будет отличаться - некоторые будут совпадать, но некоторые будут ограничены, а другие будут добавлены.
Теперь у нас есть несколько нетривиальных вариантов дизайна, и я хотел бы знать, какова лучшая практика.
ЧАСТЬ 1
В Rails имеет смысл иметь resources :users, :companies, :themes
для администраторов и, вероятно, resource :company, :theme, :users
для пользователей компании.
Но, конечно, здесь мы сталкиваемся с некоторыми конфликтами имен - как в единственном, так и во множественном числе - поэтому мы можем попробовать что-то вроде resource :my_company, :my_theme, :my_users
, чтобы разделить их? Или есть лучшее решение?
Кроме того, тема - это просто компонент компании, поэтому, может быть, мы хотим их вложить?
:resource :my_company do
:resource :theme
:resources :users
end
Это работает нормально, но это может сбить с толку вопрос о том, на какой UsersController мы ссылаемся ... нет? Это действительно липко, и я хотел бы знать, как справиться с этим. У вас есть 1 контроллер или 2? Как вы их называете?
Так что это будет пример:
http://myapp.com/my_company/theme/edit
http://myapp.com/my_company/users/1/delete
Пользователям компании также может потребоваться список тем через ajax, поэтому для них будет правильным позвонить:
http://myapp.com/themes.json
Это как подойти к этой ситуации или есть лучший способ?
ЧАСТЬ 2
Кроме того, как должна выглядеть ваша структура каталогов? Должны ли у вас контроллеры разделяться ролями пользователей?
/app/controllers/admin/companies_controller.rb
/app/controllers/admin/themes_controller.rb
/app/controllers/admin/users_controller.rb
/app/controllers/company/my_company_controller.rb
/app/controllers/company/theme_controller.rb
/app/controllers/company/users_controller.rb
Или есть лучшие способы справиться с этим?
Кажется странным, что users_controller дублируется в 2 раза и между темой и темой есть небольшая разница.
Я был бы очень признателен за вдумчивый ответ на этот вопрос. Спасибо!