You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by jf...@apache.org on 2014/10/17 04:58:10 UTC
svn commit: r1632463 - in /vcl/trunk/web/.ht-inc: privileges.php
xmlrpcWrappers.php
Author: jfthomps
Date: Fri Oct 17 02:58:10 2014
New Revision: 1632463
URL: http://svn.apache.org/r1632463
Log:
VCL-672 - privilege page does not handle user groups with the same name but different affiliations correctly
xmlrpcWrappers.php: modified XMLRPCgetUserGroupPrivs, XMLRPCaddUserGroupPriv, and XMLRPCremoveUserGroupPriv: use $groupid as key for data in arrays returned by getNodeCascadePrivileges and getNodePrivileges instead of $name
privileges.php:
-modified viewNodes, selectNode, printUserPrivRow, getUserPrivRowHTML, and checkUserHasPriv: use group id as key for data in arrays returned by getNodeCascadePrivileges and getNodePrivileges instead of group name
-modified userLookup: (unrelated to issue) expanded query for loginlog to include unityid@affiliation
-modified getNodePrivileges and getNodeCascadePrivileges: use group id as key in returned array of data instead of group name
Modified:
vcl/trunk/web/.ht-inc/privileges.php
vcl/trunk/web/.ht-inc/xmlrpcWrappers.php
Modified: vcl/trunk/web/.ht-inc/privileges.php
URL: http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/privileges.php?rev=1632463&r1=1632462&r2=1632463&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/privileges.php (original)
+++ vcl/trunk/web/.ht-inc/privileges.php Fri Oct 17 02:58:10 2014
@@ -212,11 +212,19 @@ function viewNodes() {
print " <TH>$img</TH>\n";
}
print " </TR>\n";
- $groups = array_unique(array_merge(array_keys($privs["usergroups"]),
- array_keys($cascadePrivs["usergroups"])));
- sort($groups);
- foreach($groups as $group) {
- printUserPrivRow($group, $i, $privs["usergroups"], $usertypes["users"],
+ $groupids = array_unique(array_merge(array_keys($privs["usergroups"]),
+ array_keys($cascadePrivs["usergroups"])));
+ $allids = implode(',', $groupids);
+ $query = "SELECT id "
+ . "FROM usergroup "
+ . "WHERE id IN ($allids) "
+ . "ORDER BY name";
+ $qh = doQuery($query);
+ $orderedgroups = array();
+ while($row = mysql_fetch_assoc($qh))
+ $orderedgroups[] = $row['id'];
+ foreach($orderedgroups as $id) {
+ printUserPrivRow($id, $i, $privs["usergroups"], $usertypes["users"],
$cascadePrivs["usergroups"], 'group', ! $hasUserGrant);
$i++;
}
@@ -833,11 +841,19 @@ function selectNode() {
$text .= " <TH>$img</TH>";
}
$text .= " </TR>";
- $groups = array_unique(array_merge(array_keys($privs["usergroups"]),
- array_keys($cascadePrivs["usergroups"])));
- sort($groups);
- foreach($groups as $group) {
- $tmpArr = getUserPrivRowHTML($group, $i, $privs["usergroups"],
+ $groupids = array_unique(array_merge(array_keys($privs["usergroups"]),
+ array_keys($cascadePrivs["usergroups"])));
+ $allids = implode(',', $groupids);
+ $query = "SELECT id "
+ . "FROM usergroup "
+ . "WHERE id IN ($allids) "
+ . "ORDER BY name";
+ $qh = doQuery($query);
+ $orderedgroups = array();
+ while($row = mysql_fetch_assoc($qh))
+ $orderedgroups[] = $row['id'];
+ foreach($orderedgroups as $id) {
+ $tmpArr = getUserPrivRowHTML($id, $i, $privs["usergroups"],
$usertypes["users"], $cascadePrivs["usergroups"],
'group', ! $hasUserGrant);
$text .= $tmpArr['html'];
@@ -1432,7 +1448,8 @@ function userLookup() {
. "remoteIP, "
. "code "
. "FROM loginlog "
- . "WHERE user = '{$userdata['unityid']}' AND "
+ . "WHERE (user = '{$userdata['unityid']}' OR "
+ . "user = '{$userdata['unityid']}@{$userdata['affiliation']}') AND "
. "affiliationid = {$userdata['affiliationid']} "
. "ORDER BY timestamp DESC "
. "LIMIT 8";
@@ -1718,11 +1735,10 @@ function printUserPrivRow($privname, $ro
$allprivs = $cascadeprivs + $privs;
print " <TR>\n";
if($usergroup == 'group') {
- $id = $allprivs[$privname]['id'];
- print " <TH><span id=\"usergrp$id\" onmouseover=getGroupMembers(";
- print "\"$id\",\"usergrp$id\",\"ugmcont\"); onmouseout=";
- print "getGroupMembersCancel(\"usergrp$id\");>$privname";
- if($usergroup == 'group' && ! empty($allprivs[$privname]['affiliation']))
+ print " <TH><span id=\"usergrp$privname\" onmouseover=getGroupMembers(";
+ print "\"$privname\",\"usergrp$privname\",\"ugmcont\"); onmouseout=";
+ print "getGroupMembersCancel(\"usergrp$privname\");>{$allprivs[$privname]['name']}";
+ if(! empty($allprivs[$privname]['affiliation']))
print "@{$allprivs[$privname]['affiliation']}";
print "</span></TH>\n";
}
@@ -1754,7 +1770,7 @@ function printUserPrivRow($privname, $ro
}
elseif($usergroup == 'group') {
$usergroup = 2;
- $name = "privrow[{$allprivs[$privname]['id']}:block]";
+ $name = "privrow[$privname:block]";
}
print " <TD align=center bgcolor=gray>\n";
print "<INPUT type=checkbox dojoType=dijit.form.CheckBox id=ck$rownum:block ";
@@ -1773,7 +1789,7 @@ function printUserPrivRow($privname, $ro
if($usergroup == 1)
$name = "privrow[$privname:cascade]";
else
- $name = "privrow[{$allprivs[$privname]['id']}:cascade]";
+ $name = "privrow[$privname:cascade]";
print " <TD align=center bgcolor=\"#008000\" id=cell$rownum:0>";
print "<INPUT type=checkbox dojoType=dijit.form.CheckBox id=ck$rownum:0 ";
print "name=\"$name\" onClick=\"privChange(this.checked, $rownum, 0, ";
@@ -1809,10 +1825,7 @@ function printUserPrivRow($privname, $ro
$value = "value=single";
}
}
- if($usergroup == 1)
- $name = "privrow[$privname:$type]";
- else
- $name = "privrow[{$allprivs[$privname]['id']}:$type]";
+ $name = "privrow[$privname:$type]";
print " <TD align=center id=cell$rownum:$j $bgcolor><INPUT ";
print "type=checkbox dojoType=dijit.form.CheckBox name=\"$name\" ";
print "id=ck$rownum:$j $checked $value $disabled ";
@@ -1856,11 +1869,10 @@ function getUserPrivRowHTML($privname, $
$js = "";
$text .= "<TR>";
if($usergroup == 'group') {
- $id = $allprivs[$privname]['id'];
- $text .= "<TH><span id=\"usergrp$id\" onmouseover=getGroupMembers(";
- $text .= "\"$id\",\"usergrp$id\",\"ugmcont\"); onmouseout=";
- $text .= "getGroupMembersCancel(\"usergrp$id\");>$privname";
- if($usergroup == 'group' && ! empty($allprivs[$privname]['affiliation']))
+ $text .= "<TH><span id=\"usergrp$privname\" onmouseover=getGroupMembers(";
+ $text .= "\"$privname\",\"usergrp$privname\",\"ugmcont\"); onmouseout=";
+ $text .= "getGroupMembersCancel(\"usergrp$privname\");>{$allprivs[$privname]['name']}";
+ if(! empty($allprivs[$privname]['affiliation']))
$text .= "@{$allprivs[$privname]['affiliation']}";
$text .= "</span></TH>";
}
@@ -1892,7 +1904,7 @@ function getUserPrivRowHTML($privname, $
}
elseif($usergroup == 'group') {
$usergroup = 2;
- $name = "privrow[{$allprivs[$privname]['id']}:block]";
+ $name = "privrow[$privname:block]";
}
$text .= " <TD align=center bgcolor=gray><INPUT type=checkbox ";
$text .= "dojoType=dijit.form.CheckBox id=ck$rownum:block name=\"$name\" ";
@@ -1908,10 +1920,7 @@ function getUserPrivRowHTML($privname, $
$checked = "checked";
else
$checked = "";
- if($usergroup == 1)
- $name = "privrow[$privname:cascade]";
- else
- $name = "privrow[{$allprivs[$privname]['id']}:cascade]";
+ $name = "privrow[$privname:cascade]";
$text .= " <TD align=center bgcolor=\"#008000\" id=cell$rownum:0>";
$text .= "<INPUT type=checkbox dojoType=dijit.form.CheckBox id=ck$rownum:0 ";
$text .= "name=\"$name\" onClick=\"privChange(this.checked, $rownum, 0, ";
@@ -1947,10 +1956,7 @@ function getUserPrivRowHTML($privname, $
$value = "value=single";
}
}
- if($usergroup == 1)
- $name = "privrow[$privname:$type]";
- else
- $name = "privrow[{$allprivs[$privname]['id']}:$type]";
+ $name = "privrow[$privname:$type]";
$text .= " <TD align=center id=cell$rownum:$j $bgcolor><INPUT ";
$text .= "type=checkbox dojoType=dijit.form.CheckBox name=\"$name\" ";
$text .= "id=ck$rownum:$j $checked $value $disabled ";
@@ -2233,14 +2239,14 @@ function jsonGetResourceGroupMembers() {
/// )\n
/// [usergroups] => Array\n
/// (\n
-/// [group0] => Array\n
+/// [group0 id] => Array\n
/// (\n
/// [0] => priv0\n
/// ...\n
/// [N] => privN\n
/// )\n
/// ...\n
-/// [groupN] => Array()\n
+/// [groupN id] => Array()\n
/// )\n
///)
///
@@ -2326,13 +2332,14 @@ function getNodePrivileges($node, $type=
. "ORDER BY g.name";
$qh = doQuery($query, 352);
while($row = mysql_fetch_assoc($qh)) {
- if(array_key_exists($row["groupname"], $privs["usergroups"]))
- array_push($privs["usergroups"][$row["groupname"]]['privs'], $row["priv"]);
+ if(array_key_exists($row["id"], $privs["usergroups"]))
+ array_push($privs["usergroups"][$row["id"]]['privs'], $row["priv"]);
else
- $privs["usergroups"][$row["groupname"]] = array('id' => $row['id'],
- 'affiliationid' => $row['affiliationid'],
- 'affiliation' => $row['affiliation'],
- 'privs' => array($row['priv']));
+ $privs["usergroups"][$row["id"]] = array('id' => $row['id'],
+ 'name' => $row['groupname'],
+ 'affiliationid' => $row['affiliationid'],
+ 'affiliation' => $row['affiliation'],
+ 'privs' => array($row['priv']));
}
}
$_SESSION['nodeprivileges'][$key] = $privs;
@@ -2367,14 +2374,14 @@ function getNodePrivileges($node, $type=
/// )\n
/// [usergroups] => Array\n
/// (\n
-/// [group0] => Array\n
+/// [group0 id] => Array\n
/// (\n
/// [0] => priv0\n
/// ...\n
/// [N] => privN\n
/// )\n
/// ...\n
-/// [groupN] => Array()\n
+/// [groupN id] => Array()\n
/// )\n
///)
///
@@ -2545,7 +2552,7 @@ function getNodeCascadePrivileges($node,
while(count($mynodelist)) {
$node = array_pop($mynodelist);
# get all groups with block set at this node and remove any cascaded privs
- $query = "SELECT g.name AS groupname "
+ $query = "SELECT g.id "
. "FROM usergroup g, "
. "userpriv up, "
. "userprivtype t "
@@ -2556,7 +2563,7 @@ function getNodeCascadePrivileges($node,
. "t.name = 'block'";
$qh = doQuery($query, 357);
while($row = mysql_fetch_assoc($qh)) {
- unset($privs["usergroups"][$row["groupname"]]);
+ unset($privs["usergroups"][$row["id"]]);
}
# get all privs for groups with cascaded privs
@@ -2585,14 +2592,15 @@ function getNodeCascadePrivileges($node,
$qh = doQuery($query, 358);
while($row = mysql_fetch_assoc($qh)) {
// if we've already seen this group, add it to the user's privs
- if(array_key_exists($row["groupname"], $privs["usergroups"]))
- array_push($privs["usergroups"][$row["groupname"]]['privs'], $row["priv"]);
+ if(array_key_exists($row["id"], $privs["usergroups"]))
+ array_push($privs["usergroups"][$row["id"]]['privs'], $row["priv"]);
// if we haven't seen this group, create an array containing this priv
else
- $privs["usergroups"][$row["groupname"]] = array('id' => $row['id'],
- 'affiliationid' => $row['affiliationid'],
- 'affiliation' => $row['affiliation'],
- 'privs' => array($row['priv']));
+ $privs["usergroups"][$row["id"]] = array('id' => $row['id'],
+ 'name' => $row['groupname'],
+ 'affiliationid' => $row['affiliationid'],
+ 'affiliation' => $row['affiliation'],
+ 'privs' => array($row['priv']));
}
}
}
@@ -2993,15 +3001,12 @@ function checkUserHasPriv($priv, $uid, $
foreach($_user["groups"] as $groupid => $groupname) {
// if group (has $priv at this node) ||
# (has cascaded $priv && ! have block at this node) return 1
- if((array_key_exists($groupname, $privs["usergroups"]) &&
- $groupid == $privs['usergroups'][$groupname]['id'] &&
- in_array($priv, $privs["usergroups"][$groupname]['privs'])) ||
- ((array_key_exists($groupname, $cascadePrivs["usergroups"]) &&
- $groupid == $cascadePrivs['usergroups'][$groupname]['id'] &&
- in_array($priv, $cascadePrivs["usergroups"][$groupname]['privs'])) &&
- (! array_key_exists($groupname, $privs["usergroups"]) ||
- (! in_array("block", $privs["usergroups"][$groupname]['privs']) &&
- $groupid == $privs['usergroups'][$groupname]['id'])))) {
+ if((array_key_exists($groupid, $privs["usergroups"]) &&
+ in_array($priv, $privs["usergroups"][$groupid]['privs'])) ||
+ ((array_key_exists($groupid, $cascadePrivs["usergroups"]) &&
+ in_array($priv, $cascadePrivs["usergroups"][$groupid]['privs'])) &&
+ (! array_key_exists($groupid, $privs["usergroups"]) ||
+ (! in_array("block", $privs["usergroups"][$groupid]['privs']))))) {
$_SESSION['userhaspriv'][$key] = 1;
return 1;
}
Modified: vcl/trunk/web/.ht-inc/xmlrpcWrappers.php
URL: http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/xmlrpcWrappers.php?rev=1632463&r1=1632462&r2=1632463&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/xmlrpcWrappers.php (original)
+++ vcl/trunk/web/.ht-inc/xmlrpcWrappers.php Fri Oct 17 02:58:10 2014
@@ -1858,20 +1858,22 @@ function XMLRPCgetUserGroupPrivs($name,
if($rc['status'] == 'error')
return $rc;
+ $groupid = $rc['id'];
+
$privileges = array();
$nodePrivileges = getNodePrivileges($nodeid, 'usergroups');
$cascadedNodePrivileges = getNodeCascadePrivileges($nodeid, 'usergroups');
$cngp = $cascadedNodePrivileges['usergroups'];
$ngp = $nodePrivileges['usergroups'];
- if(array_key_exists($name, $cngp)) {
- foreach($cngp[$name]['privs'] as $p) {
- if(! array_key_exists($name, $ngp) ||
- ! in_array("block", $ngp[$name]['privs']))
+ if(array_key_exists($groupid, $cngp)) {
+ foreach($cngp[$groupid]['privs'] as $p) {
+ if(! array_key_exists($groupid, $ngp) ||
+ ! in_array("block", $ngp[$groupid]['privs']))
array_push($privileges, $p);
}
}
- if(array_key_exists($name, $ngp)) {
- foreach($ngp[$name]['privs'] as $p) {
+ if(array_key_exists($groupid, $ngp)) {
+ foreach($ngp[$groupid]['privs'] as $p) {
if($p != "block")
array_push($privileges, $p);
}
@@ -1925,7 +1927,6 @@ function XMLRPCaddUserGroupPriv($name, $
return $rc;
$groupid = $rc['id'];
- #$name = "$name@$affiliation";
$perms = explode(':', $permissions);
$usertypes = getTypes('users');
array_push($usertypes["users"], "block");
@@ -1942,8 +1943,8 @@ function XMLRPCaddUserGroupPriv($name, $
$cnp = getNodeCascadePrivileges($nodeid, "usergroups");
$np = getNodePrivileges($nodeid, "usergroups", $cnp);
- if(array_key_exists($name, $np['usergroups'])) {
- $diff = array_diff($perms, $np['usergroups'][$name]['privs']);
+ if(array_key_exists($groupid, $np['usergroups'])) {
+ $diff = array_diff($perms, $np['usergroups'][$groupid]['privs']);
if(empty($diff))
return array('status' => 'success');
}
@@ -1999,7 +2000,6 @@ function XMLRPCremoveUserGroupPriv($name
return $rc;
$groupid = $rc['id'];
- #$name = "$name@$affiliation";
$perms = explode(':', $permissions);
$usertypes = getTypes('users');
array_push($usertypes["users"], "block");
@@ -2015,10 +2015,10 @@ function XMLRPCremoveUserGroupPriv($name
$cnp = getNodeCascadePrivileges($nodeid, "usergroups");
$np = getNodePrivileges($nodeid, "usergroups");
- if(array_key_exists($name, $cnp['usergroups']) &&
- (! array_key_exists($name, $np['usergroups']) ||
- ! in_array('block', $np['usergroups'][$name]))) {
- $intersect = array_intersect($cnp['usergroups'][$name]['privs'], $perms);
+ if(array_key_exists($groupid, $cnp['usergroups']) &&
+ (! array_key_exists($groupid, $np['usergroups']) ||
+ ! in_array('block', $np['usergroups'][$groupid]['privs']))) {
+ $intersect = array_intersect($cnp['usergroups'][$groupid]['privs'], $perms);
if(count($intersect)) {
return array('status' => 'error',
'errorcode' => 80,
@@ -2026,7 +2026,7 @@ function XMLRPCremoveUserGroupPriv($name
}
}
- $diff = array_diff($np['usergroups'][$name]['privs'], $perms);
+ $diff = array_diff($np['usergroups'][$groupid]['privs'], $perms);
if(count($diff) == 1 && in_array("cascade", $diff))
array_push($perms, "cascade");