Если вы посмотрите на основные компоненты Cake , вы увидите, что ваше требование CAS соответствует типу вещей, для которых обычно используются компоненты (т. Е. Auth / session).
Я бы порекомендовал создать CasAuthComponent
. В предыдущем моем ответе есть некоторая информация о расширении AuthComponent
, которая может оказаться полезной, если вы хотите построить поверх существующего ядра AuthComponent
.
Компонент (по сути, многократно используемый код контроллера) может взаимодействовать с моделями, использовать другие компоненты (например, Session) и управлять пользовательским потоком (например, перенаправляет)
Обратите внимание, что ядро AuthComponent
фактически извлекает информацию из модели (по умолчанию модель User), поэтому вы можете сделать что-то подобное.
Созданный вами CasAuthComponent
может $use
модель внешнего пользователя (возможно, CasUser
), которая отвечает за операции CRUD над данными (в основном, для поиска пользователей).
Вы можете сделать еще один шаг вперед и абстрагировать взаимодействия CAS в источник данных, используемый этой моделью, но это не является строго необходимым, если вы не планируете повторно использовать код в других моделях.
Конечный результат может быть упакован в плагин:
CasAuthComponent
(app/plugins/cas/controllers/components/cas_auth.php
)
CasUser
(app/plugins/cas/models/cas_user.php
)
CasSource
(app/plugins/cas/models/datasources/cas_source.php
) [необязательно]
И используется в вашем приложении, добавив в ваш app_controller следующее:
public $components = array('Cas.CasAuthComponent');
Если вы хотите иметь возможность администрировать пользователей из Cake, вы также можете включить контроллер и представления в свой плагин, которые позволяют пользователю взаимодействовать с моделью CasUser
(т.е. $this->CasUser->save()
).