사용자 데이터를 보호하는 가장 좋은 방법을 연구하려고합니다. 예 : 응용 프로그램에 '위젯'테이블이 있으며, 각 사용자는 필요한만큼의 위젯을 가질 수 있습니다. 응용 프로그램은 로그인 한 사용자의 ID를 참조한 'userId'열에 의해 '위젯'을 식별합니다.젠드 프레임 워크 : DB/모델 : 다른 사용자 보안 행 - 구체적인 메소드 재정의
현재 내 모델에서 fetchAll() 메서드를 재정의하여 userId = X를 추가하면 위젯 데이터에 액세스 할 수 없도록 보호하는 가장 좋은 방법은 params를 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(...);
나는 실제로 내가 할 노력하고 모든 등 고마워
감사합니다. Zend가이를 달성하는 최선의 방법을 생각해 냈을 것입니다. 명백하게 모든 CRUD를 허용하기 전에 행을 사용자가 소유하는지 확인하기 위해 모든 곳에서 체크를 추가 할 수 있지만 프레임 워크를 통해이를 달성하는 정의 된 방법이 있다면 좋을 것입니다 ... – Jucks
감사합니다. 커스텀 어설 션을 언급했는데, 궁극적으로 내가 여기서 찾고 있던 것입니다. 건배. – Jucks