Я пытаюсь найти лучший способ защитить данные пользователей.Пример: приложение имеет таблицу «виджеты», каждый пользователь может иметь столько «виджетов», сколько требуется.Приложение идентифицирует «виджеты» по столбцу «userId», который ссылается на идентификатор пользователя, вошедшего в систему.
В настоящее время лучший способ, которым я смог защитить данные виджета от доступа, если переопределитьМетод fetchAll () с моим собственным в моих моделях и добавление WHERE userId = X перед передачей параметров в parent :: fetchAll () примерно так:
class Model_Widgets extends Zend_Db_Table_Abstract {
protected $_name = 'widgets';
/**
* Abstracted function to ensure data security
* Adds in a WHERE to the SELECT to check if this user is the datas owner
*
* @see Zend_Db_Table_Abstract::fetchAll()
*/
public function fetchAll($where = null, $order = null, $count = null, $offset = null)
{
// Handle the additional security check
$userId = 'userId = ' . Model_Users::getUser()->id;
// Merge the WHERE userId statement with the rest
if($where)
{
if(is_array($where))
$where[] = $userId;
else
$where = array($where, $userId);
}
else
$where = $userId;
return parent::fetchAll($where, $order, $count, $offset);
}
Этот метод работает нормально, но я не могу помочьЧтобы думать, что должен быть лучший способ, я недавно обнаружил $ _rowClass, но все еще не уверен, что понимаю концепцию.Если переопределение конкретных функций является единственным способом применить эти проверки безопасности, есть ли способ переопределить их один раз, а не в каждой модели, возможно, с помощью помощника, а затем просто добавить функцию, подобную следующей, к каждой модели, которая должна проверять пользователяпротив строки:
public function fetchAll(...)
{
return SecurityCheckHelper::fetchAll(...);
Я надеюсь, что это имеет смысл, в действительности все, что я пытаюсь сделать, это убедиться, что пользователи не могут получить доступ к данным других пользователей, играя с идентификаторами в URL и т. д. Спасибо, ребята