* @package WB * @subpackage vfs */ WBClass::load('WBVFS_AccessControlRule'); /** * Virtual File System: Access Control Rule: File4Session * * @version 0.1.0 * @package WB * @subpackage vfs */ class WBVFS_AccessControlRule_File4Session extends WBVFS_AccessControlRule { /** * Session * @var patSession_Storage */ protected $sess; const SESS_KEY_NAME = 'wbvfs.acl.file4sess.list'; /** * Constructor * @param array $parameter */ public function __construct($parameter = array()) { parent::__construct($parameter); $this->sess = WBClass::create('patSession'); if (!$this->sess->has(self::SESS_KEY_NAME)) { $this->sess->set(self::SESS_KEY_NAME, array()); } } /** * 2nc Constructor * * Called after configuration was set */ protected function init() { } /** * Check Permissions 4 Request * * @param WBRequest * @return bool */ public function isRequestGranted($req) { $id = $this->file->getId(); $list = $this->sess->get(self::SESS_KEY_NAME); if (in_array($id, $list)) { $this->log->debug($this->getLogMsg($this::GRANT_ALLOW, 'File found in session')); return true; } $this->log->debug($this->getLogMsg($this::GRANT_DENY, 'File not in session')); return false; } /** * Add File Id * * @param string */ public function addFileId($id) { $list = $this->sess->get(self::SESS_KEY_NAME); $list[] = $id; $list = array_unique($list); $this->sess->set(self::SESS_KEY_NAME, $list); } /** * Remove File Id * * @param string */ public function removeFileId($id) { $list = $this->sess->get(self::SESS_KEY_NAME); if (!in_array($id, $list)) { return; } for ($i = 0; $i < count($list); ++$i) { if ($list[$i] == $id) { unset($list[$i]); break; } } $list = array_values($list); $this->sess->set(self::SESS_KEY_NAME, $list); } }