Список форумов Cake-PHP.ru Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
 
 Watched TopicsWatched Topics   FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Какой вариант разделения ролей грамотный?

 
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
Menya
Гость
цитировать






СообщениеДобавлено: 17 Июл 2008 11:10:39    Заголовок сообщения: Какой вариант разделения ролей грамотный? Ответить с цитатой Изменить/удалить это сообщение

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

В системе четыре роли:
Student (учатся),
Autor (создают курсы),
Expert (модерируют контент),
Admin (следят за проектом: управляют правами доступа, пишут новости и т.д.).

Роли НЕ отличаются по полям данных, которые хранятся в базе данных, но сильно отличаются по функционалу. Причем более старшая модель наследует функциональность более младшей (например, авторы могут учиться и писать свои курсы, а эксперты – учиться, писать и модерировать и т.д.)

Задача:
Определить создаваемые таблицы базы данных, модели и контроллеры.

Варианты решения:
1. создать одну модель User с полем status, и один контроллер
2. создать одну модель User и по контроллеру для каждой роли, использующие эту модель
3. создать четыре модели (student, autor, expert и admin) (и соответственно, четыре контроллера), НО они будут использовать одну и ту же таблицу базы данных (users)
4. четыре модели (student, autor, expert и admin), каждая со своим контроллером и таблицей.
5. пять моделей: четыре модели из пункта в„–.4 + модель User (в которую войдут общие для всех ролей данные) + четыре связи hasOne

Пожалуйста, скажите какой вариант предпочтительнее, а главное почему?
Вернуться к началу
Hellbot

цитировать



Зарегистрирован: 19 Май 2008 16:29:15
Сообщения: 34

СообщениеДобавлено: 17 Июл 2008 19:29:53    Заголовок сообщения: Ответить с цитатой

---------- не по теме ! -------------
class User extends AppModel
belongsTo('Group')
actsAs('Aro')
class Group extends AppModel
hasMany('User');
actsAs('Aro')

Где права выдаются группам или пользователям (если надо персонально), на дерево действий, например
Сourses / join (Allow Group: Student, Author, Expert, Admin)
Courses / add (Allow: Author, Expert, Admin)
Users / list (Allow: Admin)
Users / edit (Allow: *)

При необходимости дополнить проверку на соответсвие id автора на id текущего пользователя.

Мне кажется это предпочтительнее потому что легко расширяется (проверка прав осуществеляется независимо от количеств групп или модулей системы), проверка может быть вынесена за пределы основной логики контроллеров (например будет поддерживаться компонентом Auth)
-------------

Прощу прощения Embarassed Embarassed
Что-то конец рабочего дня дает о себе знать, мне показалось это про разделение системы прав кому чего можно. Прочитав сообщение группе понял что вопрос не про это.

"У кого что болит, тот о том и говорит" (с)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Hellbot

цитировать



Зарегистрирован: 19 Май 2008 16:29:15
Сообщения: 34

СообщениеДобавлено: 17 Июл 2008 19:39:12    Заголовок сообщения: Ответить с цитатой

Но вообще мне кажется что изначально постановка задачи не правильная.

это не ExpertController -> JoinCourses.
А все таки правильнее.
CoursesContoller->Join($user_id)

А необходимость связей я вижу пожалуй только при выводе информации о пользователе, где можно отталкиваться от его группы или его типа (если нет групп) или не отталкиваться вообще.
Если User не может Courses->add, то и его связь hasMany('Courses') вернет для него 0 записей.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Имя
Сообщение

Смайлики
Very Happy Smile Sad Surprised
Shocked Confused Cool Laughing
Mad Razz Embarassed Crying or Very sad
Evil or Very Mad Twisted Evil Rolling Eyes Wink
Exclamation Question Idea Arrow
Дополнительные смайлики

 
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы можете редактировать свои сообщения
Вы можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Рейтинг@Mail.ru