00001 <?php
00006 include_once("core/system/JBaseObject.class.php");
00007 include_once("core/db/dbjames.class.php");
00008 include_once("core/system/JSystemError.class.php");
00009 include_once("core/system/JUgrSystem.class.php");
00010
00014 class Role extends JBaseObject
00015 {
00016 var $data;
00017 var $perms;
00018
00019
00026 function Role ($idR)
00027 {
00028 $dbObj = new DBJames();
00029
00030 $query = "SELECT * FROM Roles ";
00031 $query .= "WHERE idR = " . $idR;
00032
00033 $dbObj->Query($query);
00034
00035 if ($dbObj->numRows == 1)
00036 {
00037 $this->data = $dbObj->row;
00038 $this->perms =& $this->_GetAllPermissions();
00039 }
00040 else
00041 {
00042 $this->data = null;
00043 $this->RaiseConstructorError(new JSystemError(ERROR_ROLE_NOT_FOUND));
00044 }
00045 }
00046
00047
00052 function &_GetAllPermissions()
00053 {
00054 $dbObj = new DBJames();
00055
00056 $query = " SELECT Permissions.* ";
00057 $query .= " FROM Permissions, RelRolesPermissions";
00058 $query .= " WHERE RelRolesPermissions.idR = ".$this->GetId();
00059 $query .= " AND Permissions.idP = RelRolesPermissions.idP";
00060 $query .= " ORDER BY Permissions.idM";
00061
00062 $dbObj->Query($query);
00063
00064 $result = array();
00065
00066 while (! $dbObj->EOF)
00067 {
00068 $result[$dbObj->row["idM"]][$dbObj->row["name"]] = true;
00069 $dbObj->Next();
00070 }
00071
00072 return $result;
00073 }
00074
00075
00081 function _NumUsers($idR)
00082 {
00083 $dbObj = new DBJames();
00084
00085 $query = " SELECT DISTINCT RelUsersGroups.idU ";
00086 $query .= " FROM RelUsersGroups ";
00087 $query .= " WHERE idR = ". $idR;
00088
00089 $dbObj->Query($query);
00090
00091 return $dbObj->numRows;
00092 }
00093
00098 function GetId()
00099 {
00100 return $this->data["idR"];
00101 }
00102
00107 function GetName()
00108 {
00109 return $this->data["name"];
00110 }
00111
00119 function SetName($name)
00120 {
00121 $this->data["name"] = $name;
00122 }
00123
00127 function Commit()
00128 {
00129 $dbObj = new DBJames();
00130
00131 $query = " UPDATE Roles SET ";
00132 $query .= " name = '".$this->GetName()."'";
00133 $query .= " WHERE idR = ".$this->GetId();
00134
00135 $dbObj->Execute($query);
00136 }
00137
00143 function GetPermissions($idM)
00144 {
00145 if($this->data == null)
00146 {
00147 return JSystem::RaiseError(
00148 new JSystemError(ERROR_NOT_INITIALIZED));
00149 }
00150
00151 return $this->perms[$idM];
00152 }
00153
00154
00161 function HasPermission($name, $idM)
00162 {
00163 if($this->data == null)
00164 {
00165 return JSystem::RaiseError(
00166 new JSystemError(ERROR_NOT_INITIALIZED));
00167 }
00168
00169 return $this->perms[$idM][$name];
00170 }
00171
00172
00178 function AddPermission($name, $idM)
00179 {
00180 $modulesobj =& Modules::GetInstance();
00181
00182 $mod =& $modulesobj->GetModule($idM);
00183 if (JSystem::IsError($mod))
00184 return $mod;
00185 else
00186 {
00187 $this->perms =& $this->_GetAllPermissions();
00188 if (! $this->perms[$idM][$name])
00189 {
00190
00191 $module =& $modulesobj->GetModule($idM);
00192 $idP = $module->GetPermissionId($name);
00193
00194
00195 $dbObj = new DBJames();
00196 $query = "INSERT INTO RelRolesPermissions ";
00197 $query .= " (idP, idR) VALUES ";
00198 $query .= " (".$idP.", ".$this->GetId().") ";
00199 $dbObj->Execute($query);
00200 $this->perms[$idM][$name] = true;
00201 }
00202 }
00203 }
00204
00205
00211 function RemovePermission($name, $idM)
00212 {
00213 $modulesobj =& Modules::GetInstance();
00214
00215 $module =& $modulesobj->GetModule($idM);
00216
00217 if (JSystem::IsError($module))
00218 return $module;
00219 else
00220 {
00221 $this->perms =& $this->_GetAllPermissions();
00222 if ($this->perms[$idM][$name])
00223 {
00224
00225 $idP = $module->GetPermissionId($name);
00226
00227
00228 $dbObj = new DBJames();
00229 $query = " DELETE FROM RelRolesPermissions ";
00230 $query .= " WHERE idP = ".$idP;
00231 $query .= " AND idR = ".$this->GetId();
00232 $dbObj->Execute($query);
00233 $this->perms[$idM][$name] = false;
00234 }
00235 }
00236 }
00237
00238
00244 function &Create($name)
00245 {
00246 $dbObj = new DBJames();
00247
00248 $query = " INSERT INTO Roles ";
00249 $query .= " (name) VALUES ";
00250 $query .= " ('".$name."') ";
00251
00252 $dbObj->Execute($query);
00253
00254 $dbObj->SetInsertId();
00255
00256 $role =& new Role($dbObj->newID);
00257 if (JSystem::IsError($role))
00258 return JSystem::GetLastError();
00259 else
00260 return $role;
00261 }
00262
00263
00268 function Remove($idR)
00269 {
00270 $ugrsystem =& JugrSystem::GetInstance();
00271
00272 if (JSystem::IsError($ugrsystem->GetRole($idR)))
00273 {
00274 return JSystem::RaiseError(
00275 new JSystemError(ERROR_ROLE_NOT_FOUND));
00276 }
00277 else if (Role::_NumUsers($idR) > 0)
00278 {
00279 return JSystem::RaiseError(
00280 new JSystemError(ERROR_STILL_USERS_WITH_ROLE));
00281 }
00282 else
00283 {
00284 $dbObj = new DBJames();
00285
00286
00287 $query = " DELETE FROM RelRolesPermissions ";
00288 $query .= " WHERE idR=".$idR;
00289 $dbObj->Execute($query);
00290
00291
00292 $query = " DELETE FROM Roles ";
00293 $query .= " WHERE idR = ". $idR;
00294 $dbObj->Execute($query);
00295 }
00296 }
00297
00302 function GetAllRolesId()
00303 {
00304 $dbObj = new DBJames();
00305 $query = " SELECT * FROM Roles ";
00306 $dbObj->Query($query);
00307
00308 return $dbObj;
00309 }
00310 }
00311 ?>