privilege.php
上传用户:snow1005
上传日期:2015-11-10
资源大小:3151k
文件大小:7k
源码类别:

Ajax

开发平台:

JavaScript

  1. <?php
  2. /*
  3.  * qWikiOffice Desktop 0.8.1
  4.  * Copyright(c) 2007-2008, Integrated Technologies, Inc.
  5.  * licensing@qwikioffice.com
  6.  * 
  7.  * http://www.qwikioffice.com/license
  8.  */
  9. class privilege {
  10.     private $os;
  11.     
  12.     public function __construct($os){
  13.         $this->os = $os;
  14.     }
  15.     
  16.     /** init() Initial page load or refresh has occured 
  17.   **/
  18. public function init(){
  19. if(isset($_SESSION['privileges'])){
  20.         unset($_SESSION['privileges']);
  21.     }
  22. }
  23.     
  24.     /** get_all() Will return all the privileges associated with a member for the current session.
  25.   *
  26.   * @access public
  27.   * @param {integer} $member_id The member id
  28.   * @param {integer} $group_id The group id
  29.   **/
  30. public function get_all($member_id, $group_id){
  31. $privileges = array();
  32. $member_id = $this->os->session->get_member_id();
  33. $group_id = $this->os->session->get_group_id();
  34. if($member_id != "" && $group_id != ""){
  35. unset($_SESSION['privileges']);
  36. $sql = "SELECT
  37. is_allowed,
  38. P.is_singular AS is_privilege_singular,
  39. A.name AS action,
  40. D.is_singular AS is_domain_singular,
  41. M.id AS module_id,
  42. M.module_id AS moduleId,
  43. G.importance
  44. FROM qo_groups_has_domain_privileges AS GDP
  45. -- Privileges Joins --
  46. INNER JOIN qo_privileges AS P ON P.id = GDP.qo_privileges_id 
  47. INNER JOIN qo_privileges_has_module_actions AS PA ON PA.qo_privileges_id = P.id
  48. INNER JOIN qo_modules_actions AS A ON A.id = PA.qo_modules_actions_id
  49. -- Domain Joins --
  50. INNER JOIN qo_domains AS D ON D.id = GDP.qo_domains_id
  51. INNER JOIN qo_domains_has_modules AS DM ON DM.qo_domains_id = D.id
  52. INNER JOIN qo_modules AS M ON M.id = DM.qo_modules_id
  53. -- Groups to member Joins --
  54. INNER JOIN qo_groups AS G ON G.id = GDP.qo_groups_id
  55. INNER JOIN qo_groups_has_members AS MG ON MG.qo_groups_id = G.id
  56. WHERE
  57. qo_members_id = ".$member_id."
  58. AND
  59. G.id = ".$group_id."
  60. ORDER BY
  61. A.name, G.importance DESC";
  62. $result = mysql_query($sql);
  63. // Initialise variables.
  64. $weight = -1; // Used to find out which privileges take precedence.
  65. $is_allowed = 0; // FALSE, initialise
  66. $prev_importance = '';
  67. $prev_action= '';
  68. $prev_module = '';
  69. $prev_is_allowed= '';
  70. $count = 0;
  71. $arr_data = array(); // Store temporary data
  72. // Loop through all matches
  73. while($row = mysql_fetch_assoc($result)){
  74. $action = $row["action"];
  75. $module_id = $row["module_id"]; // MySQL table id
  76. $moduleId = $row["moduleId"]; // moduleId property of the module
  77. $importance = $row["importance"];
  78. $is_allowed = (int) $row["is_allowed"];
  79. // We are only interested in the groups with the most importance (i.e. Some groups may have the same importance.)
  80. if ($count > 0 && $action === $prev_action && $module_id === $prev_module){
  81. if ($importance < $prev_importance || $prev_is_allowed === 0){
  82. continue;
  83. }
  84. }
  85. $new_weight = (int) $row["is_privilege_singular"] + (int) $row["is_domain_singular"];
  86. if ($new_weight > $weight){
  87. $weight = $new_weight;
  88. }
  89. else if ($new_weight == $weight && (int) $is_allowed === 1 && $is_allowed === 0){
  90. // We always give more weight to denials.
  91. $weight = $new_weight;
  92. }
  93. //echo "Group: ".$row["group"]."<br /> weight: ".$new_weight."<br />is_allowed: ".$row["is_allowed"]."<br>";
  94. $prev_importance = $importance;
  95. $prev_module = $module_id;
  96. $prev_action = $action;
  97. $prev_is_allowed = $is_allowed;
  98. $count++;
  99. // store value in sessions for next time
  100. // note: module id here referes to the MySQL record id
  101. $_SESSION['privileges'][$action][$moduleId] = $is_allowed;
  102. // store value in an array to return
  103. if($is_allowed){
  104. // note: moduleId here referes to the javascript moduleId
  105. $privileges[$action][] = $moduleId;
  106. }
  107. //$privileges[$action][$module_id] = $is_allowed;
  108. }
  109. }
  110. return json_encode($privileges);
  111. } // end get_all()
  112. /** is_allowed() checks whether a member (in group) is allowed
  113.   * an action on a module.
  114.   *
  115.   * @param {string} $action The action name
  116.   * @param {integer} $module_id The module id
  117.   * @param {integer} $member_id The member id
  118.   * @param {integer} $group_id The group id
  119.   * @return {boolean}
  120.   **/
  121. public function is_allowed($action, $moduleId, $member_id, $group_id){
  122. if($member_id != "" && $group_id != "" && $action != "" && $moduleId != ""){
  123. // check if answer is already in sessions
  124. if(isset($_SESSION['privileges'][$action][$moduleId])){
  125. if($_SESSION['privileges'][$action][$moduleId]){
  126. return TRUE;
  127. }else{
  128. return FALSE;
  129. }
  130. }
  131. $sql = "SELECT
  132. is_allowed,
  133. P.is_singular AS is_privilege_singular,
  134. D.is_singular AS is_domain_singular,
  135. G.importance
  136. FROM
  137. qo_groups_has_domain_privileges AS GDP
  138. -- Privileges Joins --
  139. INNER JOIN qo_privileges AS P ON P.id = GDP.qo_privileges_id 
  140. INNER JOIN qo_privileges_has_module_actions AS PA ON PA.qo_privileges_id = P.id
  141. INNER JOIN qo_modules_actions AS A ON A.id = PA.qo_modules_actions_id
  142. -- Domain Joins --
  143. INNER JOIN qo_domains AS D ON D.id = GDP.qo_domains_id
  144. INNER JOIN qo_domains_has_modules AS DM ON DM.qo_domains_id = D.id
  145. INNER JOIN qo_modules AS M ON M.id = DM.qo_modules_id
  146. -- Groups to members Joins --
  147. INNER JOIN qo_groups AS G ON G.id = GDP.qo_groups_id
  148. INNER JOIN qo_groups_has_members AS MG ON MG.qo_groups_id = G.id
  149. WHERE
  150. qo_members_id = ".$member_id."
  151. AND
  152. G.id = ".$group_id."
  153. AND
  154. A.name = '".$action."'
  155. AND
  156. M.module_id = '".$moduleId."'
  157. ORDER BY
  158. G.importance DESC, G.name";
  159. $result = mysql_query($sql);
  160. // Initialise variables.
  161. $weight = -1; // Used to find out which privileges take precedence.
  162. $is_allowed = 0; // FALSE, initialise
  163. $prev_importance = '';
  164. $count = 0;
  165. while($row = mysql_fetch_assoc($result)){
  166. $importance = $row["importance"];
  167. $is_allowed = (int) $row["is_allowed"];
  168. // Only interested in the groups with the most importance (i.e. Some groups may have the same importance.)
  169. if ($count > 0 && $importance !== $prev_importance){
  170. break;
  171. }
  172. $new_weight = (int) $row["is_privilege_singular"] + (int) $row["is_domain_singular"];
  173. if ($new_weight > $weight){
  174. $weight = $new_weight;
  175. }else if($new_weight == $weight && (int) $is_allowed === 1 && (int) $is_allowed === 0){
  176. // Give more weight to denials.
  177. $weight = $new_weight;
  178. }
  179. $prev_importance = $importance;
  180. $count++;
  181. }
  182. }
  183. // Store value in sessions for next time
  184. $_SESSION['privileges'][$action][$moduleId] = $is_allowed;
  185. // Return answer
  186. if ($is_allowed){
  187. return true;
  188. }else{
  189. return false;
  190. }
  191. } // end is_allowed()
  192. }
  193. ?>