модуль аутентификации, зона ответственности

ps2007

Новичок
модуль аутентификации, зона ответственности

Всем привет.
На одном из форумов прочитал, что модуль аутентификации должен иметь две функции: login($user, $password) и logged_in($role). Все остальное (регистрация пользователя, смена пароля) не относится к модулю аутентификации и должно быть в другом месте.
Ведь логично, что создание хеша пароля и проверка этого хеша вещи взаимосвязанные.

Не могу понять, почему так.
 

AmdY

Пью пиво
Команда форума
ты путаешь класс аутентификации и модуль-контроллер.
про класс можешь почитать в теме про переход на php 5.3, там мне подобное объяснял кто-то.
а вот что делать в контроллере - это как тебе виднее, вон триумвират вовсе делает классы с одним методом.
 

ps2007

Новичок
ты путаешь класс аутентификации и модуль-контроллер.
нет, не путаю. Я ясно понимаю, что класс аутентификации является частью модели.
В моем понимании класс аутентификации должен иметь кроме методов login($user, $password) и logged_in($role) еще и методы для создания пользователя, смена пароля и управление ролями (добавить/удалить).
Но в этом случае класс аутентификации будет выполнять часть обязанностей класса User и Role. Вот это меня и смущает.
Необходимость в методе смены пароля (и создания пользователя тоже) в том, что (как указано выше) создание хеша пароля и проверка этого хеша вещи взаимосвязанные.
 

AmdY

Пью пиво
Команда форума
triumvirat если бы я хотел покритиковать, я бы сделал это там, а так, скорее поставил себе галочку, как один из вариантов архитектуры.

ps2007
в том и дело, что аутентификации - это сервисный класс, а не часть модели. очень советую почитать, о чём писали мне, тем недавняя.
 

ps2007

Новичок
AmdY, я перед тем, как написать ответ поискал эту тему и прочитал ее, только не знаю, это она или нет ?
http://phpclub.ru/talk/showthread.php?s=&threadid=117994&perpage=20&pagenumber=3
В ней ничего нет касательно моего вопроса.

аутентификации - это сервисный класс, а не часть модели
Я наверное что-то не понял. Согласно парадигмы MVC бизнес-логика находится в модели. В крайнем случае в контроллере, и то немного. Если класс аутентификации не является частью модели, то значит ли это, что класс аутентификации должен быть задействован в контроллере ?
В гугле не нашел, что такое "сервисный класс".

Вопросов стало еще больше ...
 

dr-sm

Новичок
Re: модуль аутентификации, зона ответственности

Автор оригинала: ps2007
Всем привет.
На одном из форумов прочитал, что модуль аутентификации должен иметь две функции: login($user, $password) и logged_in($role). Все остальное (регистрация пользователя, смена пароля) не относится к модулю аутентификации и должно быть в другом месте.
Ведь логично, что создание хеша пароля и проверка этого хеша вещи взаимосвязанные.

Не могу понять, почему так.
правильнее имхо так:

интерфейс аутентификации должен иметь две функции: login($user, $password) и logged_in($role).
 

Beavis

Banned
если учесть, что даже аутентификация и авторизация - это две разные вещи, то в модуле аутентификации вообще должно быть минимум функциональности
 

ps2007

Новичок
Всем спасибо за обсуждение, буду пробовать стиль программирования "My way" :)))

Давно появлялась мысль забить на (некоторые) шаблоны, на общепринятые взгляды на некоторые блоки/классы и прочие степеотипы, которые мы вбиваем себе в голову из учебников и других источников. И начать все познавать самому, набивая шишки и приобретая _свой_ опыт, а не вычитанный из книг.

Причина проста - время идет, а опыта не добавляется, проблемы не решаются. То в одном месте не гибко, то в другом месте что-то не предусмотрел из-за того, что применял те стереотипные решения. Кроме того постоянно грызет мысль о том, что эти неудачи связаны с тем, что я чего-то не знаю или неправильно применяю шаблоны/прочее. Но все знать и уметь невозможно. Нужно делать, а не сомневаться.

-~{}~ 05.03.10 02:21:

Я нашел причину такого построения большинства модулей/классов авторизации.

Тему можно закрыть.
 

AmdY

Пью пиво
Команда форума
о, раз я не сплю....
аутентификация должна иметь 3 метода login(узнать), logout(забыть), isLogged(опознан ли). Роль класса - помогать другим узнавать статус isLogged. Роль (у тебя logged_in($role)) относится уже к авторизации. если isLogged() == false, то пользователь анонимус, иначе мы узнаём через ACL права пользователя на ресурс. ACL для опознания пользователя нужен метод User->getCurrentUserId. а вот CurrentUser может быть, только если прошла аутентификация.
Фактически у нас куча объектов, зато всё прозрачно. Я же свалил всё в кучу, на основании своего опыта, что хорошо для меня, но плохо для того, кто будет этот код поддерживать.

И если ты не дункан маклауд, и не бессмертен, то не учись на своём опыте, пользуйся чужим, иди в команду к кому-нить толковому, возможно с данного форума. толковые и желающие учиться люди нужны всегда и всем.
 
Сверху