Commit f6d9b805a12d3ba19b8a4493b920bdb4ad279661
1 parent
09e5fb43
Make permissions take effect in default browse listing.
git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@4249 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
1 changed file
with
72 additions
and
38 deletions
lib/browse/PartialQuery.inc.php
| ... | ... | @@ -51,41 +51,88 @@ class PartialQuery { |
| 51 | 51 | class BrowseQuery extends PartialQuery{ |
| 52 | 52 | // FIXME cache permission lookups, etc. |
| 53 | 53 | var $folder_id = -1; |
| 54 | + var $sPermissionName = "ktcore.permissions.read"; | |
| 54 | 55 | |
| 55 | 56 | function BrowseQuery($iFolderId) { $this->folder_id = $iFolderId; } |
| 56 | 57 | |
| 58 | + function _getDocumentQuery($aOptions = null) { | |
| 59 | + $oUser = User::get($_SESSION['userID']); | |
| 60 | + list($sPermissionString, $aPermissionParams, $sPermissionJoin) = KTSearchUtil::permissionToSQL($oUser, $this->sPermissionName); | |
| 61 | + | |
| 62 | + $aPotentialWhere = array($sPermissionString, 'D.folder_id = ?', 'D.status_id = 1'); | |
| 63 | + $aWhere = array(); | |
| 64 | + foreach ($aPotentialWhere as $sWhere) { | |
| 65 | + if (empty($sWhere)) { | |
| 66 | + continue; | |
| 67 | + } | |
| 68 | + if ($sWhere == "()") { | |
| 69 | + continue; | |
| 70 | + } | |
| 71 | + $aWhere[] = $sWhere; | |
| 72 | + } | |
| 73 | + $sWhere = ""; | |
| 74 | + if ($aWhere) { | |
| 75 | + $sWhere = "\tWHERE " . join(" AND ", $aWhere); | |
| 76 | + } | |
| 77 | + | |
| 78 | + $sSelect = KTUtil::arrayGet($aOptions, 'select', 'D.id'); | |
| 79 | + | |
| 80 | + $sQuery = "SELECT $sSelect FROM " . KTUtil::getTableName("documents") . " AS D $sPermissionJoin $sWhere "; | |
| 81 | + $aParams = array(); | |
| 82 | + $aParams = array_merge($aParams, $aPermissionParams); | |
| 83 | + $aParams[] = $this->folder_id; | |
| 84 | + return array($sQuery, $aParams); | |
| 85 | + } | |
| 86 | + | |
| 87 | + function _getFolderQuery($aOptions = null) { | |
| 88 | + $oUser = User::get($_SESSION['userID']); | |
| 89 | + list($sPermissionString, $aPermissionParams, $sPermissionJoin) = KTSearchUtil::permissionToSQL($oUser, $this->sPermissionName, "F"); | |
| 90 | + | |
| 91 | + $aPotentialWhere = array($sPermissionString, 'F.parent_id = ?'); | |
| 92 | + $aWhere = array(); | |
| 93 | + foreach ($aPotentialWhere as $sWhere) { | |
| 94 | + if (empty($sWhere)) { | |
| 95 | + continue; | |
| 96 | + } | |
| 97 | + if ($sWhere == "()") { | |
| 98 | + continue; | |
| 99 | + } | |
| 100 | + $aWhere[] = $sWhere; | |
| 101 | + } | |
| 102 | + $sWhere = ""; | |
| 103 | + if ($aWhere) { | |
| 104 | + $sWhere = "\tWHERE " . join(" AND ", $aWhere); | |
| 105 | + } | |
| 106 | + | |
| 107 | + $sSelect = KTUtil::arrayGet($aOptions, 'select', 'F.id'); | |
| 108 | + | |
| 109 | + $sQuery = "SELECT $sSelect FROM " . KTUtil::getTableName("folders") . " AS F $sPermissionJoin $sWhere "; | |
| 110 | + $aParams = array(); | |
| 111 | + $aParams = array_merge($aParams, $aPermissionParams); | |
| 112 | + $aParams[] = $this->folder_id; | |
| 113 | + return array($sQuery, $aParams); | |
| 114 | + } | |
| 57 | 115 | |
| 58 | 116 | function getFolderCount() { |
| 59 | - // FIXME add permission checks here | |
| 60 | - $sQuery = "SELECT count(id) AS c FROM " . KTUtil::getTableName("folders") . " WHERE parent_id = ? "; | |
| 61 | - $aParams = array($this->folder_id); | |
| 62 | - | |
| 63 | - return DBUtil::getOneResultKey(array($sQuery, $aParams), 'c'); | |
| 117 | + $aOptions = array( | |
| 118 | + 'select' => 'count(F.id) AS cnt', | |
| 119 | + ); | |
| 120 | + $aQuery = $this->_getFolderQuery($aOptions); | |
| 121 | + $iRet = DBUtil::getOneResultKey($aQuery, 'cnt'); | |
| 122 | + return $iRet; | |
| 64 | 123 | } |
| 65 | 124 | |
| 66 | 125 | function getDocumentCount() { |
| 67 | - // FIXME add permission checks here | |
| 68 | - $sQuery = "SELECT count(id) AS c FROM " . KTUtil::getTableName("documents") . " AS D WHERE D.folder_id = ? AND D.status_id = 1 "; | |
| 69 | - $aParams = array($this->folder_id); | |
| 70 | - | |
| 71 | - return DBUtil::getOneResultKey(array($sQuery, $aParams), 'c'); // FIXME is this right? | |
| 126 | + $aOptions = array( | |
| 127 | + 'select' => 'count(D.id) AS cnt', | |
| 128 | + ); | |
| 129 | + $aQuery = $this->_getDocumentQuery($aOptions); | |
| 130 | + $iRet = DBUtil::getOneResultKey($aQuery, 'cnt'); | |
| 131 | + return $iRet; | |
| 72 | 132 | } |
| 73 | 133 | |
| 74 | 134 | function getFolders($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) { |
| 75 | - // FIXME add permission checks here | |
| 76 | - $aParams = array(); | |
| 77 | - $aJoinParams = array($aJoinParams); | |
| 78 | - | |
| 79 | - $sQuery = "SELECT id FROM " . KTUtil::getTableName("folders") . " AS F WHERE parent_id = ? "; | |
| 80 | - $aParams[] = $this->folder_id; | |
| 81 | - | |
| 82 | - if ($sJoinClause !== null) { | |
| 83 | - $sQuery .= $sJoinClause; | |
| 84 | - foreach ($aJoinParams as $param) { | |
| 85 | - $aParams[] = $param; | |
| 86 | - } // FIXME use merge... | |
| 87 | - } | |
| 88 | - | |
| 135 | + list($sQuery, $aParams) = $this->_getFolderQuery(); | |
| 89 | 136 | $sQuery .= " ORDER BY " . $sSortColumn . " " . $sSortOrder . " "; |
| 90 | 137 | |
| 91 | 138 | $sQuery .= " LIMIT ?, ?"; |
| ... | ... | @@ -100,20 +147,7 @@ class BrowseQuery extends PartialQuery{ |
| 100 | 147 | } |
| 101 | 148 | |
| 102 | 149 | function getDocuments($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) { |
| 103 | - // FIXME add permission checks here | |
| 104 | - $aParams = array(); // main parameter array. | |
| 105 | - $aJoinParams = array($aJoinParams); | |
| 106 | - | |
| 107 | - $sQuery = "SELECT id FROM " . KTUtil::getTableName("documents") . " AS D WHERE D.folder_id = ? AND D.status_id = 1 "; | |
| 108 | - $aParams = array($this->folder_id); | |
| 109 | - | |
| 110 | - if ($sJoinClause !== null) { | |
| 111 | - $sQuery .= $sJoinClause; | |
| 112 | - foreach ($aJoinParams as $param) { | |
| 113 | - $aParams[] = $param; | |
| 114 | - } // FIXME use merge... | |
| 115 | - } | |
| 116 | - | |
| 150 | + list($sQuery, $aParams) = $this->_getDocumentQuery(); | |
| 117 | 151 | $sQuery .= " ORDER BY " . $sSortColumn . " " . $sSortOrder . " "; |
| 118 | 152 | |
| 119 | 153 | $sQuery .= " LIMIT ?, ?"; | ... | ... |