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,41 +51,88 @@ class PartialQuery { | ||
| 51 | class BrowseQuery extends PartialQuery{ | 51 | class BrowseQuery extends PartialQuery{ |
| 52 | // FIXME cache permission lookups, etc. | 52 | // FIXME cache permission lookups, etc. |
| 53 | var $folder_id = -1; | 53 | var $folder_id = -1; |
| 54 | + var $sPermissionName = "ktcore.permissions.read"; | ||
| 54 | 55 | ||
| 55 | function BrowseQuery($iFolderId) { $this->folder_id = $iFolderId; } | 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 | function getFolderCount() { | 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 | function getDocumentCount() { | 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 | function getFolders($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) { | 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 | $sQuery .= " ORDER BY " . $sSortColumn . " " . $sSortOrder . " "; | 136 | $sQuery .= " ORDER BY " . $sSortColumn . " " . $sSortOrder . " "; |
| 90 | 137 | ||
| 91 | $sQuery .= " LIMIT ?, ?"; | 138 | $sQuery .= " LIMIT ?, ?"; |
| @@ -100,20 +147,7 @@ class BrowseQuery extends PartialQuery{ | @@ -100,20 +147,7 @@ class BrowseQuery extends PartialQuery{ | ||
| 100 | } | 147 | } |
| 101 | 148 | ||
| 102 | function getDocuments($iBatchSize, $iBatchStart, $sSortColumn, $sSortOrder, $sJoinClause = null, $aJoinParams = null) { | 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 | $sQuery .= " ORDER BY " . $sSortColumn . " " . $sSortOrder . " "; | 151 | $sQuery .= " ORDER BY " . $sSortColumn . " " . $sSortOrder . " "; |
| 118 | 152 | ||
| 119 | $sQuery .= " LIMIT ?, ?"; | 153 | $sQuery .= " LIMIT ?, ?"; |