Где я должен поместить код проверки сеанса CAS в приложение CakePHP? - PullRequest
2 голосов
/ 31 июля 2009

Я работаю в отделе университета, который использует CAS для обеспечения аутентификации с использованием единого входа, и пишу приложение CakePHP, которое должно использовать эту службу CAS. Мне нужно написать код, который:

  • Проверяет сервер CAS на наличие входа пользователя в систему
  • Получает некоторые учетные данные с сервера, если это так
  • Проверяет учетные данные по внутреннему ACL, так как набор людей, которые могут получить доступ к приложению, является подмножеством набора, который может войти в службу CAS.
  • Предоставляет некоторый механизм для пользователей-администраторов, либо путем создания специальных пользователей-администраторов вне системы CAS (со всеми вытекающими отсюда головными болями), либо путем продвижения определенных пользователей CAS (с разными сопутствующими головными болями).

Как относительный новичок в CakePHP, я часто борюсь с тем, где придерживаться кода, который «не принадлежит». Лучшее, что я могу понять, это то, что этот код должен идти в методе beforeFilter контроллера приложений, но мне интересно, это лучшее место для него? Кроме того, это слишком низко в стеке, чтобы использовать преимущества маршрутизации администратора?

Наконец, я знаю, что CakePHP предоставляет компоненты как Auth, так и ACL, но когда я изучил их использование, оказалось, что они не поддаются взаимодействию с внешними службами аутентификации. Я не прав, и подойдет ли что-нибудь из этого для того, что мне нужно сделать?

Спасибо!

1 Ответ

1 голос
/ 31 июля 2009

Если вы посмотрите на основные компоненты 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()).

...