Я знаю, что это может показаться немного странным для пользователя admin generator.yml во внешнем интерфейсе, но каждая страница - это либо список, либо страница редактирования, и это определенно самые простые вещи.
После борьбы с написанием модуля входа в систему я установил sfDoctrineGuardPlugin и использовал отношения, чтобы связать их с моей основной таблицей пользователей. Все в базе данных опирается на эту таблицу, и данные на текущем живом сайте накапливаются немногим более 8 месяцев, и мне нужно их сохранить.
Моя текущая проблема заключается в том, что, как только кто-то входит в систему и сохраняет свой идентификатор в системе защиты, мне нужны все страницы для фильтрации всех результатов по нему, включая списки и изменения.
Есть ли простой способ сделать это или мне нужно использовать table_method для каждого списка?
Единственная проблема с вышеперечисленным состоит в том, что идентификатор появляется в адресе, и мне нужно, чтобы люди не могли просматривать данные, которые не должны.
Кроме того, и это, вероятно, скоро изменится, в тот момент, когда таблицы являются MyISAM для использования лучшего автоматического приращения, может иметь приращение для пользователя, поэтому каждый человек начинает с одного. Однако кажется, что он не использует внешние ключи, поэтому, когда я пишу код для преобразования его в INNOBDB, идентификатор в адресе становится более важным для людей, которые не могут измениться.
Owner:
columns:
id: { type: integer(4), primary: true, autoincrement: true }
slname: { type: string(64), notnull: true }
uuid: { type: string(36), notnull: true }
e_mail: { type: string(64) }
user: { type: string(16) }
pass: { type: string(40), notnull: true }
subscription: { type: integer(4), default: '0', notnull: true }
registered: { type: integer(1), default: '0', notnull: true }
relations:
Subscription: { local: subscription, foreign: id }
User: { class: sfGuardUser, foreign: id, local: id, type: one, onDelete: cascade, foreignType: one, foreignAlias: Owner }
Как только плагин заработает, я планирую удалить пароль из таблицы выше, использовать пароль по умолчанию и заставить всех делать новые проходы.
EDIT:
Спасибо, Бен, у меня работает шаблон, я думаю. В любом случае он добавляется в столбец к базе данных.
class Doctrine_Template_Owned extends Doctrine_Template
{
protected $_options = array(
'name' => 'owner_id',
'type' => 'integer',
'length' => 11,
'options' => array(
'default' => 0,
'notnull' => true
)
);
public function setTableDefinition()
{
$this->hasColumn($this->_options['name'], $this->_options['type'], $this->_options['length'], $this->_options['options']);
$this->addListener(new Doctrine_Template_Listener_Owned($this->_options));
}
}
Однако слушатель не хочет, чтобы его вызывали.
class Doctrine_Template_Listener_Owned extends Doctrine_Record_Listener
{
protected $_options = array();
public function __construct(array $options)
{
$this->_options = $options;
}
public function preDqlSelect(Doctrine_Event $event)
{
$params = $event->getParams();
$field = $params['alias'] . '.' . $this->_options['name'];
$query = $event->getQuery();
if (( ! $query->isSubquery() || ($query->isSubquery() && $query->contains(' ' . $params['alias'] . ' '))) && ! $query->contains($field)) {
$query->addPendingJoinCondition(
$params['alias'], $field . ' = ' . sfContext::getInstance()->getUser()->getGuardUser()->getId()
);
}
}
}
Код для слушателя - это код мягкого удаления с удалением расписания и логической проверки. Хотя строка не появляется, чтобы появиться в панели разработчиков.