Skip to content

Commit

Permalink
Dev Fixed some issue with new permission system
Browse files Browse the repository at this point in the history
  • Loading branch information
c-schmitz committed Apr 1, 2013
1 parent 285c822 commit 663cb85
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 29 deletions.
6 changes: 3 additions & 3 deletions application/controllers/admin/surveypermission.php
Expand Up @@ -69,7 +69,7 @@ function index($surveyid)
if(in_array($PermissionRow['uid'],$userList))
{

$result3 = UserInGroups::model()->with('users')->findAll('users.uid = :uid',array(':uid' => $PermissionRow['uid']));
$result3 = UserInGroup::model()->with('users')->findAll('users.uid = :uid',array(':uid' => $PermissionRow['uid']));
foreach ($result3 as $resul3row)
{
if (Yii::app()->getConfig('usercontrolSameGroupPolicy') == false ||
Expand Down Expand Up @@ -318,7 +318,7 @@ function adduser($surveyid)

if($postuserid > 0){

$isrresult = Permission::model()->insertSomeRecords(array('sid' => $surveyid, 'uid' => $postuserid, 'permission' => 'survey', 'read_p' => 1));
$isrresult = Permission::model()->insertSomeRecords(array('entity_id' => $surveyid, 'entity'=>'survey', 'uid' => $postuserid, 'permission' => 'survey', 'read_p' => 1));

if($isrresult)
{
Expand Down Expand Up @@ -612,7 +612,7 @@ function surveyright($surveyid)

if (isset($postusergroupid) && $postusergroupid>0)
{
$oResult = UserInGroups::model()->findAll('ugid = :ugid AND uid <> :uid AND uid <> :iOwnerID',array(':ugid' => $postusergroupid, ':uid' => Yii::app()->session['loginID'], ':iOwnerID' => $iOwnerID));
$oResult = UserInGroup::model()->findAll('ugid = :ugid AND uid <> :uid AND uid <> :iOwnerID',array(':ugid' => $postusergroupid, ':uid' => Yii::app()->session['loginID'], ':iOwnerID' => $iOwnerID));
if(count($oResult) > 0)
{
foreach ($oResult as $aRow)
Expand Down
10 changes: 5 additions & 5 deletions application/controllers/admin/usergroups.php
Expand Up @@ -41,12 +41,12 @@ public function mail($ugid)
if ($action == "mailsendusergroup") {

// user must be in user group or superadmin
$result = UserInGroups::model()->findAllByPk(array('ugid' => $ugid, 'uid' => Yii::app()->session['loginID']));
$result = UserInGroup::model()->findAllByPk(array('ugid' => $ugid, 'uid' => Yii::app()->session['loginID']));
if (count($result) > 0 || Permission::model()->hasGlobalPermission('superadmin','read'))
{
$criteria = new CDbCriteria;
$criteria->compare('ugid',$ugid)->addNotInCondition('users.uid',array(Yii::app()->session['loginID']));
$eguresult = UserInGroups::model()->with('users')->findAll($criteria);
$eguresult = UserInGroup::model()->with('users')->findAll($criteria);
//die('me');
$to = '';

Expand Down Expand Up @@ -357,12 +357,12 @@ function user($ugid, $action = 'add')
list($aViewUrls, $aData) = $this->index($ugid, array('type' => 'warning', 'message' => $clang->gT('Failed.') . '<br />' . $clang->gT('You can not add or remove the group owner from the group.')));
}

$user_in_group = UserInGroups::model()->findByPk(array('ugid' => $ugid, 'uid' => $uid));
$user_in_group = UserInGroup::model()->findByPk(array('ugid' => $ugid, 'uid' => $uid));

switch ($action)
{
case 'add' :
if (empty($user_in_group) && UserInGroups::model()->insertRecords(array('ugid' => $ugid, 'uid' => $uid)))
if (empty($user_in_group) && UserInGroup::model()->insertRecords(array('ugid' => $ugid, 'uid' => $uid)))
{
list($aViewUrls, $aData) = $this->index($ugid, array('type' => 'success', 'message' => $clang->gT('User added.')));
}
Expand All @@ -373,7 +373,7 @@ function user($ugid, $action = 'add')

break;
case 'remove' :
if (!empty($user_in_group) && UserInGroups::model()->deleteByPk(array('ugid' => $ugid, 'uid' => $uid)))
if (!empty($user_in_group) && UserInGroup::model()->deleteByPk(array('ugid' => $ugid, 'uid' => $uid)))
{
list($aViewUrls, $aData) = $this->index($ugid, array('type' => 'success', 'message' => $clang->gT('User removed.')));
}
Expand Down
4 changes: 2 additions & 2 deletions application/helpers/common_helper.php
Expand Up @@ -7497,7 +7497,7 @@ function getSurveyUserList($bIncludeOwner=true, $bIncludeSuperAdmins=true,$surve
$surveyid=sanitize_int($surveyid);

$sSurveyIDQuery = "SELECT a.uid, a.users_name, a.full_name FROM {{users}} AS a
LEFT OUTER JOIN (SELECT uid AS id FROM {{permissions}} WHERE sid = {$surveyid}) AS b ON a.uid = b.id
LEFT OUTER JOIN (SELECT uid AS id FROM {{permissions}} WHERE entity_id = {$surveyid} and entity='survey') AS b ON a.uid = b.id
WHERE id IS NULL ";
if (!$bIncludeSuperAdmins)
{
Expand Down Expand Up @@ -7542,7 +7542,7 @@ function getSurveyUserGroupList($outputformat='htmloptions',$surveyid)
SELECT b.ugid
FROM {{user_in_groups}} AS b
LEFT JOIN (SELECT * FROM {{permissions}}
WHERE sid = {$surveyid}) AS c ON b.uid = c.uid WHERE c.uid IS NULL
WHERE entity_id = {$surveyid} and entity='survey') AS c ON b.uid = c.uid WHERE c.uid IS NULL
) AS d ON a.ugid = d.ugid GROUP BY a.ugid, a.name HAVING MAX(d.ugid) IS NOT NULL";
$surveyidresult = Yii::app()->db->createCommand($surveyidquery)->query(); //Checked
$aResult=$surveyidresult->readAll();
Expand Down
4 changes: 2 additions & 2 deletions application/libraries/PluginManager/LimesurveyApi.php
Expand Up @@ -201,8 +201,8 @@ public function getUser($iUserID){
* Returns null if the user does not exist anymore for some reason (should not really happen)
* @return User
*/
public function getUserPermissionSet($iUserID, $iSurveyID=0){
return Permission::model()->getPermissions($iUserID,$iSurveyID);
public function getPermissionSet($iUserID, $iEntityID=null, $sEntityName=null){
return Permission::model()->getPermissions($iUserID, $iEntityID, $sEntityName);
}

/**
Expand Down
45 changes: 29 additions & 16 deletions application/models/Permission.php
Expand Up @@ -102,26 +102,38 @@ public static function getGlobalBasePermissions()
return $aPermissions;
}

public static function getPermissions($iUserID, $iSurveyID=0)
public static function getPermissions($iUserID, $iEntityID=null, $sEntityName=null)
{
if ($iSurveyID)
if ($sEntityName=='survey')
{
$aBasePermissions=Permission::model()->getSurveyBasePermissions();
}
else
elseif ($sEntityName=='global')
{
$aBasePermissions=Permission::model()->getGlobalBasePermissions();
}

foreach ($aBasePermissions as $sPermission=>&$aPermissionDetail){
$oCurrentPermissions=Permission::model()->findByAttributes(array('uid'=>$iUserID,'sid'=>$iSurveyID, 'permission'=>$sPermission));
if ($aPermissionDetail['create']) $aPermissionDetail['create']=($oCurrentPermissions?(boolean)$oCurrentPermissions->create_p:false);
if ($aPermissionDetail['read']) $aPermissionDetail['read']=($oCurrentPermissions?(boolean)$oCurrentPermissions->read_p:false);
if ($aPermissionDetail['update']) $aPermissionDetail['update']=($oCurrentPermissions?(boolean)$oCurrentPermissions->update_p:false);
if ($aPermissionDetail['delete']) $aPermissionDetail['delete']=($oCurrentPermissions?(boolean)$oCurrentPermissions->delete_p:false);
if ($aPermissionDetail['import']) $aPermissionDetail['import']=($oCurrentPermissions?(boolean)$oCurrentPermissions->import_p:false);
if ($aPermissionDetail['export']) $aPermissionDetail['export']=($oCurrentPermissions?(boolean)$oCurrentPermissions->export_p:false);
}

if (is_null($sEntityName))
{
$oPermissions=Permission::model()->findAllByAttributes(array('uid'=>$iUserID));
$aBasePermissions = array();
foreach($oPermissions as $oPermission)
{
$aBasePermissions[$oPermission->id] = $oPermission->attributes;
}
}
else
{
foreach ($aBasePermissions as $sPermission=>&$aPermissionDetail){
$oCurrentPermissions=Permission::model()->findByAttributes(array('uid'=>$iUserID,'sid'=>$iSurveyID, 'permission'=>$sPermission));
if ($aPermissionDetail['create']) $aPermissionDetail['create']=($oCurrentPermissions?(boolean)$oCurrentPermissions->create_p:false);
if ($aPermissionDetail['read']) $aPermissionDetail['read']=($oCurrentPermissions?(boolean)$oCurrentPermissions->read_p:false);
if ($aPermissionDetail['update']) $aPermissionDetail['update']=($oCurrentPermissions?(boolean)$oCurrentPermissions->update_p:false);
if ($aPermissionDetail['delete']) $aPermissionDetail['delete']=($oCurrentPermissions?(boolean)$oCurrentPermissions->delete_p:false);
if ($aPermissionDetail['import']) $aPermissionDetail['import']=($oCurrentPermissions?(boolean)$oCurrentPermissions->import_p:false);
if ($aPermissionDetail['export']) $aPermissionDetail['export']=($oCurrentPermissions?(boolean)$oCurrentPermissions->export_p:false);
}
}
return $aBasePermissions;
}

Expand Down Expand Up @@ -177,7 +189,7 @@ public static function setPermissions($iUserID, $iEntityID, $sEntityName, $aPerm
$aPermission['export']= (isset($aPermissions[$sPermissionname]['export']) && $aPermissions[$sPermissionname]['export']);
}

$condition = array('sid' => $iEntityID, 'uid' => $iUserID);
$condition = array('entity_id' => $iEntityID, 'uid' => $iUserID);
$oEvent=new PluginEvent('beforePermissionSetSave');
$oEvent->set('aNewPermissions',$aBasePermissions);
$oEvent->set('iSurveyID',$iEntityID);
Expand All @@ -190,7 +202,8 @@ public static function setPermissions($iUserID, $iEntityID, $sEntityName, $aPerm
if ($aPermission['create'] || $aPermission['read'] ||$aPermission['update'] || $aPermission['delete'] || $aPermission['import'] || $aPermission['export'])
{
$data = array(
'sid' => $iEntityID,
'entity_id' => $iEntityID,
'entity' => $sEntityName,
'uid' => $iUserID,
'permission' => $sPermissionname,
'create_p' => (int)$aPermission['create'],
Expand Down Expand Up @@ -330,7 +343,7 @@ function hasPermission($iEntityID, $sEntityName, $sPermission, $sCRUD, $iUserID=
if ($aPermissionCache[0]['global'][$iUserID]['superadmin']['read_p']) return true;
if (!isset($aPermissionCache[$iEntityID][$sEntityName][$iUserID][$sPermission][$sCRUD]))
{
$query = $this->findByAttributes(array("sid"=> $iEntityID, "uid"=> $iUserID, "entity"=>$sEntityName, "permission"=>$sPermission));
$query = $this->findByAttributes(array("entity_id"=> $iEntityID, "uid"=> $iUserID, "entity"=>$sEntityName, "permission"=>$sPermission));
$bPermission = is_null($query) ? array() : $query->attributes;
if (!isset($bPermission[$sCRUD]) || $bPermission[$sCRUD]==0)
{
Expand Down
2 changes: 1 addition & 1 deletion plugins/AuditLog/AuditLog.php
Expand Up @@ -29,7 +29,7 @@ public function beforePermissionSetSave(PluginEvent $event)
$iSurveyID=$event->get('iSurveyID');
$iUserID=$event->get('iUserID');
$oCurrentUser=$this->api->getCurrentUser();
$oOldPermission=$this->api->getUserPermissionSet($iUserID,$iSurveyID);
$oOldPermission=$this->api->getPermissionSet($iUserID, $iSurveyID, 'survey');
$sAction='update'; // Permissions are in general only updated (either you have a permission or you don't)

if (count(array_diff_assoc_recursive($aNewPermissions,$oOldPermission)))
Expand Down

0 comments on commit 663cb85

Please sign in to comment.