more work on privilges, some of it even usefull
authorxzilla <xzilla>
Fri, 3 Jan 2003 20:49:17 +0000 (20:49 +0000)
committerxzilla <xzilla>
Fri, 3 Jan 2003 20:49:17 +0000 (20:49 +0000)
lang/english.php
public_html/privileges.php

index 757c44f2e86afab243469221b0fd84045bb1c96d..d8bcccf9bbf3ef649cb711b621b85b4d570ffec3 100755 (executable)
@@ -4,7 +4,7 @@
         * Language template file for WebDB.  Use this to base language
         * files.
         *
-        * $Id: english.php,v 1.26 2003/01/02 03:42:08 chriskl Exp $
+        * $Id: english.php,v 1.27 2003/01/03 20:49:17 xzilla Exp $
         */
 
        $appLang = 'English';
@@ -28,7 +28,6 @@
        $strView = 'View';
        $strViews = 'Views';
        $strDefinition = 'Definition';
-       $strTriggers = 'Triggers';
        $strRules = 'Rules';
        $strSequence = 'Sequence';
        $strSequences = 'Sequences';
        $strAlter = 'Alter';
        $strCancel = 'Cancel';
        $strSave = 'Save';
-       $strPrivileges = 'Privileges';
        $strInsert = 'Insert';
        $strSelect = 'Select';
        $strDelete = 'Delete';
        $strUpdate = 'Update';
        $strRule = 'Rule';
        $strReferences = 'References';
-       $strTrigger = 'References';
        $strYes = 'Yes';
        $strNo = 'No';
        $strEdit = 'Edit';
        $strExpires = 'Expires';        
        $strNoUsers = 'No users found.';
        
+       // Privilges
+       $strPrivileges = 'Privileges';
+       $strGrant = 'Grant';
+       $strRevoke = 'Revoke';
+
        // Databases
        $strDatabase = 'Database';
        $strDatabases = 'Databases';
        $strFunctionNeedsDef = 'You must give a definition for your function.';
        
        // Triggers
+       $strTrigger = 'Trigger';
        $strTriggers = 'Triggers';
        $strNoTriggers = 'No triggers found.';
        $strCreateTrigger = 'Create Trigger';
index 3a7885bd4921ae05605394fd7ea633e9a39341bd..f51bc7c1604053c940d3603cb81706df53fd0c74 100644 (file)
@@ -3,7 +3,7 @@
        /**\r
         * Manage views in a database\r
         *\r
-        * $Id: privileges.php,v 1.1 2002/12/19 22:27:38 xzilla Exp $\r
+        * $Id: privileges.php,v 1.2 2003/01/03 20:49:17 xzilla Exp $\r
         */\r
 \r
        // Include application functions\r
                        else\r
                                doCreate('View creation failed.');\r
                }\r
+/*\r
+       $i = 0;\r
+       while ($p = $arrPrivileges[$i]) {\r
+               $cb_priv[$p] = '<input type="checkbox" name="privileges[]" value="'. "$p\"> ". ucfirst($p) ."</input>";\r
+               $i++;\r
+       }\r
+       $Expected = $strYes;\r
+       $Action = "grant";\r
+       $strToFrom = "to";\r
+\r
+       $privileges = get_privilege($table);\r
+       switch ($action) {\r
+               case "revoke":\r
+                       $Expected =  $strNo;\r
+                       $Action = "revoke";\r
+                       $strToFrom = "from";\r
+               case "grant":\r
+                       $name = rawurldecode($user);\r
+\r
+                       $i = 0;\r
+                       while ($p = $arrPrivileges[$i]) {\r
+                               if ($privileges[$name][$p] == $Expected) {\r
+                                       unset($cb_priv[$p]); }\r
+                               $i++;\r
+                       }\r
+                       $user = "$cfgQuotes$name$cfgQuotes";\r
+                       $user = eregi_replace("${cfgQuotes}group ", "GROUP $cfgQuotes", $user);\r
+                       $user = eregi_replace("${cfgQuotes}public$cfgQuotes", "PUBLIC", $user);\r
+                       $input_user = '<input type="hidden" name="user" value="'. rawurlencode($user) .'">';\r
+                       break;\r
+               case "grantuser":\r
+                       $qrUsers = "SELECT 'public'::text AS thename UNION SELECT '$cfgQuotes' || usename || '$cfgQuotes' AS thename FROM pg_user WHERE usename NOT IN ('root', '$cfgSuperUser'";\r
+                       @reset($privileges);\r
+                       while (list($key) = @each ($privileges))\r
+                               if (!ereg("group ", $key))\r
+                                       $qrUsers .= ", '$key'";\r
+                       $qrUsers .= ") ORDER BY thename";\r
+               case "grantgroup":\r
+                       if (!isset($qrUsers)) {\r
+                               $qrUsers = "SELECT 'group $cfgQuotes' || groname || '$cfgQuotes' AS thename FROM pg_group";\r
+                               @reset($privileges);\r
+                               while (list($key) = @each($privileges)) \r
+                                       if (ereg("^group (.+)$", $key, $regs))\r
+                                               $tmp .=", '".$regs[1]."'";\r
+                               if (isset($tmp)) {\r
+                                       $tmp[0] = '(';\r
+                                       $qrUsers .= " WHERE groname NOT IN $tmp)";\r
+                               }\r
+                               $qrUsers .= " ORDER BY thename";\r
+                       }\r
+                       if (!$res = @pg_exec($link, $qrUsers)) {\r
+                               pg_die(pg_errormessage($link), $qrUsers, __FILE__, __LINE__);\r
+                       } else {\r
+                               $name = '<select name="user">';\r
+                               $num_rows = pg_numrows($res);\r
+                               for ($i = 0; $i < $num_rows; $i++) {\r
+                                       $row = pg_fetch_array($res, $i);\r
+                                       $name .= '<option value="'.rawurlencode($row['thename']) . '">'. $row['thename'] ."</option>";\r
+                               }\r
+                               $name .= "</select>\n";\r
+                       }\r
+               }\r
+       unset($action);\r
+*/\r
+\r
+\r
        }       \r
 \r
+       /**\r
+       * Show the grant menu on the screen\r
+       */\r
+\r
+       function doModify($action) {\r
+               global $data, $localData, $misc, $database;\r
+               global $PHP_SELF, $strPrivileges, $strGrant, $strRevoke, $strCancel; \r
+               global $strUser,$strGroup,$strSelect,$strInsert,$strUpdate,$strDelete,$strRule;\r
+               global $strReferences,$strTrigger,$strAction,$strYes,$strNo;\r
+\r
+               $object = $_REQUEST['object'];\r
+               // $server = $_REQUEST['server'];\r
+               $server = 'deprecated';\r
+               $user = $_REQUEST['user'];\r
+               $db = $_REQUEST['database'];\r
+\r
+               $arrPrivileges = array('select',        'insert',       'update',       'delete',       'rule', 'references',   'trigger');\r
+               $arrAcl        = array('r',             'a',            'w',            'd',            'R',    'x',                    't');           \r
+\r
+               $i = 0;\r
+               while ($p = $arrPrivileges[$i]) {\r
+                       $cb_priv[$p] = '<input type="checkbox" name="privileges[]" value="'. "$p\"> ". ucfirst($p) ."</input>";\r
+                       $i++;\r
+               }\r
+\r
+               // $privileges = get_privilege($table);\r
+               $privileges = &$localData->getPrivileges($object);\r
+       \r
+               $GrantRevoke = $strGrant;\r
+               $ToFrom = 'to';\r
+               $Expected = $strYes;\r
+\r
+               switch ($action) {\r
+                       case "revoke":\r
+                               $GrantRevoke = $strRevoke;\r
+                               $ToFrom = 'from';\r
+                               $Expected =  $strNo;\r
+                       case "grant":\r
+\r
+                               $name = rawurldecode($user);\r
+\r
+                               $i = 0;\r
+                               while ($p = $arrPrivileges[$i]) {\r
+                                       echo $privileges[$name][$p];\r
+                                       if ($privileges[$name][$p] == $Expected) {\r
+                                               unset($cb_priv[$p]); }\r
+                                       $i++;\r
+                               }\r
+                               $user = "\"$name\"";\r
+                               $user = eregi_replace("group", "GROUP", $user);\r
+                               $user = eregi_replace("public", "PUBLIC", $user);\r
+                               $input_user = '<input type="hidden" name="user" value="'. rawurlencode($user) .'">';\r
+                               break;\r
+                       case "grantuser":\r
+                               $qrUsers = "SELECT 'public'::text AS thename UNION SELECT '$cfgQuotes' || usename || '$cfgQuotes' AS thename FROM pg_user WHERE usename NOT IN ('root', '$cfgSuperUser'";\r
+                               @reset($privileges);\r
+                               while (list($key) = @each ($privileges))\r
+                                       if (!ereg("group ", $key))\r
+                                               $qrUsers .= ", '$key'";\r
+                               $qrUsers .= ") ORDER BY thename";\r
+                       case "grantgroup":\r
+                               if (!isset($qrUsers)) {\r
+                                       $qrUsers = "SELECT 'group $cfgQuotes' || groname || '$cfgQuotes' AS thename FROM pg_group";\r
+                                       @reset($privileges);\r
+                                       while (list($key) = @each($privileges)) \r
+                                               if (ereg("^group (.+)$", $key, $regs))\r
+                                                       $tmp .=", '".$regs[1]."'";\r
+                                       if (isset($tmp)) {\r
+                                               $tmp[0] = '(';\r
+                                               $qrUsers .= " WHERE groname NOT IN $tmp)";\r
+                                       }\r
+                                       $qrUsers .= " ORDER BY thename";\r
+                               }\r
+                               if (!$res = @pg_exec($link, $qrUsers)) {\r
+                                       pg_die(pg_errormessage($link), $qrUsers, __FILE__, __LINE__);\r
+                               } else {\r
+                                       $name = '<select name="user">';\r
+                                       $num_rows = pg_numrows($res);\r
+                                       for ($i = 0; $i < $num_rows; $i++) {\r
+                                               $row = pg_fetch_array($res, $i);\r
+                                               $name .= '<option value="'.rawurlencode($row['thename']) . '">'. $row['thename'] ."</option>";\r
+                                       }\r
+                                       $name .= "</select>\n";\r
+                               }\r
+                       }\r
+               unset($action);\r
+\r
+               echo "<h2>", htmlspecialchars($db), ": $strPrivileges : $object : $GrantRevoke</h2>\n";\r
+\r
+               echo strtoupper($GrantRevoke);\r
+       \r
+               echo '<form method="post" action="$PHP_SELF">';\r
+               \r
+               $i = 0;\r
+               while ($p = $arrPrivileges[$i]) {\r
+                       if (isset($cb_priv[$p])) { \r
+                               echo $cb_priv[$p], "<br>";\r
+                       }\r
+               $i++;\r
+               }\r
\r
+               echo "ON $object ". strtoupper($ToFrom) ." $name";\r
+\r
+               echo '<input type="hidden" name="server" value="'. rawurlencode($server) ."\">\n";\r
+               echo '<input type="hidden" name="object" value="'. $object ."\">\n";\r
+               echo '<input type="hidden" name="db" value="'. $db ."\">\n";\r
+               echo $input_user;\r
+               echo '<p>';\r
+               echo '<input type="submit" name="todo" value="'. strtoupper($GrantRevoke) ."\">\n";\r
+               echo '<input type="button" value="'. $strCancel .'" onClick="history.back()">';\r
+               echo '</form>';\r
+\r
+\r
+\r
+/*\r
+               $privs = &$localData->getPrivileges($object);\r
+\r
+               if ($privs->recordCount() == 1) {\r
+\r
+                       $i = 0;\r
+                       while ($p = $privs[$i]) {\r
+                       $cb_priv[$p] = '<input type="checkbox" name="privileges[]" value="'. "$p\"> ". ucfirst($p) ."</input>";\r
+                               $i++;\r
+                       }\r
+                       $Expected = $strYes;\r
+                       $strToFrom = "to";\r
+\r
+\r
+                       $name = rawurldecode($_REQUEST['user']);\r
+\r
+                       $i = 0;\r
+                       while ($p = $privs[$i]) {\r
+                               if ($privs[$name][$p] == $Expected) {\r
+                                       unset($cb_priv[$p]); }\r
+                               $i++;\r
+                       }\r
+                       $user = "$name";\r
+                       $user = eregi_replace(" ", "GROUP", $user);\r
+                       $user = eregi_replace(" ", "PUBLIC", $user);\r
+                       $input_user = '<input type="hidden" name="user" value="'. rawurlencode($user) .'">';\r
+               }       \r
+\r
+               echo '<form method="post" action="$PHP_SELF">';\r
+               \r
+               $i = 0;\r
+               while ($p = $arrPrivileges[$i]) {\r
+                       if (isset($cb_priv[$p])) { \r
+                               echo $cb_priv[$p], "<br>";\r
+                       }\r
+               $i++;\r
+               }\r
+\r
+*/\r
+       }\r
+\r
+\r
        /**\r
         * Show default list of views in the database\r
         */\r
        function doDefault($msg = '') {\r
-               global $data, $localData, $misc, $database, $view;\r
-               global $PHP_SELF, $strPrivileges, $strOwner, $strActions, $strNoViews;\r
-               global $strUser,$strGroup,$strSelect,$strInsert,$strUpdate,$strDelete,$strRule,$strReferences,$strTrigger,$strAction,$strYes,$strNo;\r
+               global $data, $localData, $misc, $database;\r
+               global $PHP_SELF, $strPrivileges, $strGrant, $strRevoke; \r
+               global $strUser,$strGroup,$strSelect,$strInsert,$strUpdate,$strDelete,$strRule;\r
+               global $strReferences,$strTrigger,$strAction,$strYes,$strNo;\r
                \r
-               echo "<h2>", htmlspecialchars($_REQUEST['database']), ": $strPrivileges</h2>\n";\r
-               $misc->printMsg($msg);\r
-\r
-\r
                $object = $_REQUEST['object'];\r
 \r
+               echo "<h2>", htmlspecialchars($_REQUEST['database']), ": $strPrivileges : $object</h2>\n";\r
+               $misc->printMsg($msg);\r
+\r
                $privs = &$localData->getPrivileges($object);\r
 \r
                // We must return only one row from the above query\r
 \r
                if ($privs->recordCount() == 1) {\r
-                       echo "<table border=0>\n";\r
+                       echo "<table border=1>\n";\r
                        echo "<tr>\n";\r
                        echo "<th>$strUser/$strGroup</th><th>$strSelect</th><th>$strInsert</th><th>$strUpdate</th><th>$strDelete</th><th>$strRule</th><th>$strReferences</th><th>$strTrigger</th><th colspan=\"2\">$strAction</th>\n";\r
                        echo "</tr>\n";\r
 \r
-\r
                        $priv = trim(ereg_replace("[\{\"]", "", $privs->f[$data->privFields['privarr']]));\r
 \r
                        $users = explode(",", $priv);\r
                                $aryUser = explode("=", $users[$iUsers]);\r
                                $username = $aryUser[0] ? $aryUser[0] : "public";\r
                                $privilege = $aryUser[1]; \r
-                       \r
-\r
                                        \r
                                echo "<tr>\n";\r
                                echo "<td>$username</td>\n";\r
                \r
-                               $arrAcl = array('a','r','w','d','R','x','t');\r
-                               $arrAcl = array('r','a','w','d','R','t');\r
-                               $arrPrivs = array();\r
+                               $arrAcl = array('r','a','w','d','R','x','t');\r
                                for ($i = 0; $i < 7; $i++) {\r
                        \r
                                        echo '<td>';    \r
                                        echo strchr($privilege, $arrAcl[$i]) ? $strYes : $strNo;\r
                                        echo '</td>';\r
-       \r
-                                       // $priv[$username][$arrPrivs[$i]] = strchr($privilege, $arrAcl[$i]) ? $strYes : $strNo;\r
-                                       //echo $aryUser[0], ": ", $arrPrivs[$i], ":", $privilege, "<br>";\r
-                                       //      $result[trim($aryUser[0])][$arrPrivs[$i]] = strchr($privilege, $arrAcl[$i]) ? $strYes : $strNo;\r
                                }\r
 \r
+                               echo "<td><a href=\"$PHP_SELF?database=", urlencode($_REQUEST['database']), "&object=", urlencode($object), "&action=grant&user=", urlencode($username), "\">$strGrant</a></td>";\r
+\r
+                               echo "<td><a href=\"$PHP_SELF?database=", urlencode($_REQUEST['database']), "&object=", urlencode($object), "&action=revoke&user=", urlencode($username), "\">$strRevoke</a></td>";\r
+\r
                                echo "</tr>\n";\r
        \r
                        }\r
                        echo "Could Not Retrieve ACL for Object $object";\r
                }\r
 \r
-\r
-echo <<<EOF\r
-               <table border=0>\r
-               <tr>\r
-               <th>$strUser/$strGroup</th><th>$strSelect</th><th>$strInsert</th><th>$strUpdate</th><th>$strDelete</th><th>$strRule</th><th>$strReferences</th><th>$strTrigger</th><th colspan="2">$strAction</th>\r
-               </tr>\r
-               \r
-               <tr bgcolor="#DDDDDD">\r
-               <td>public</td>\r
-               <td>No</td>\r
-               <td>No</td>\r
-               <td>No</td>\r
-\r
-               <td>No</td>\r
-               <td>No</td>\r
-               <td>No</td>\r
-               <td>No</td>\r
-               <td><a href="tbl_privilege.php?server=2&db=1.01&table=region_entity_counts_view&goto=tbl_privilege.php&action=grant&user=public">Grant</a></td>\r
-               <td><a href="tbl_privilege.php?server=2&db=1.01&table=region_entity_counts_view&goto=tbl_privilege.php&action=revoke&user=public">Revoke</a></td>\r
-\r
-               </td>\r
-               <tr bgcolor="#CCCCCC">\r
-               <td>postgres</td>\r
-               <td>Yes</td>\r
-               <td>Yes</td>\r
-               <td>Yes</td>\r
-               <td>Yes</td>\r
-\r
-               <td>Yes</td>\r
-               <td>Yes</td>\r
-               <td>Yes</td>\r
-               <td><a href="tbl_privilege.php?server=2&db=1.01&table=region_entity_counts_view&goto=tbl_privilege.php&action=grant&user=postgres">Grant</a></td>\r
-               <td><a href="tbl_privilege.php?server=2&db=1.01&table=region_entity_counts_view&goto=tbl_privilege.php&action=revoke&user=postgres">Revoke</a></td>\r
-               </td>\r
-\r
-               <tr bgcolor="#CCCCCC">\r
-               <td>rms</td>\r
-               <td>Yes</td>\r
-               <td>Yes</td>\r
-               <td>Yes</td>\r
-               <td>Yes</td>\r
-\r
-               <td>No</td>\r
-               <td>No</td>\r
-               <td>No</td>\r
-               <td><a href="tbl_privilege.php?server=2&db=1.01&table=region_entity_counts_view&goto=tbl_privilege.php&action=grant&user=rms">Grant</a></td>\r
-               <td><a href="tbl_privilege.php?server=2&db=1.01&table=region_entity_counts_view&goto=tbl_privilege.php&action=revoke&user=rms">Revoke</a></td>\r
-               </td>\r
-\r
-</table>       <br>\r
-       <li><a href="tbl_privilege.php?server=2&db=1.01&table=region_entity_counts_view&goto=tbl_privilege.php&action=grantuser">Add User</a>\r
-       <li><a href="tbl_privilege.php?server=2&db=1.01&table=region_entity_counts_view&goto=tbl_privilege.php&action=grantgroup">Add Group</a>\r
-    </td>\r
-  </tr>\r
-</table>\r
-\r
-EOF;\r
-\r
-       \r
-               $views = &$localData->getViews();\r
-               \r
-               if ($views->recordCount() > 0) {\r
-                       echo "<table>\n";\r
-                       echo "<tr><th class=data>{$strView}</th><th class=data>{$strOwner}</th><th colspan=4 class=data>{$strActions}</th>\n";\r
-                       $i = 0;\r
-                       while (!$views->EOF) {\r
-                               $id = (($i % 2) == 0 ? '1' : '2');\r
-                               echo "<tr><td class=data{$id}>", htmlspecialchars($views->f[$data->vwFields['vwname']]), "</td>\n";\r
-                               echo "<td class=data{$id}>", htmlspecialchars($views->f[$data->vwFields['vwowner']]), "</td>\n";\r
-                               echo "<td class=opbutton{$id}><a href=\"$PHP_SELF?action=browse&offset=0&limit=30&database=", \r
-                                       htmlspecialchars($_REQUEST['database']), "&view=", urlencode($views->f[$data->vwFields['vwname']]), "\">Browse</a></td>\n";\r
-                               echo "<td class=opbutton{$id}>Select</td>\n";\r
-                               echo "<td class=opbutton{$id}><a href=\"$PHP_SELF?action=properties&database=", \r
-                                       htmlspecialchars($_REQUEST['database']), "&view=", urlencode($views->f[$data->vwFields['vwname']]), "\">Properties</a></td>\n";\r
-                               echo "<td class=opbutton{$id}><a href=\"$PHP_SELF?action=confirm_drop&database=", \r
-                                       htmlspecialchars($_REQUEST['database']), "&view=", urlencode($views->f[$data->vwFields['vwname']]), "\">Drop</a></td>\n";\r
-                               echo "</tr>\n";\r
-                               $views->moveNext();\r
-                               $i++;\r
-                       }\r
-                       echo "</table>\n";\r
-               }\r
-               else {\r
-                       echo "<p>{$strNoViews}</p>\n";\r
-               }\r
-               \r
-               echo "<p><a class=navlink href=\"$PHP_SELF?action=create&database=", urlencode($_REQUEST['database']), "\">Create View</a></p>\n";\r
-\r
-\r
        }\r
 \r
        echo "<html>\n";\r
@@ -344,8 +472,12 @@ EOF;
                case 'properties':\r
                        doProperties();\r
                        break;\r
-               case 'browse':\r
-                       // @@ Not yet implemented\r
+               case 'grant':\r
+                       doModify('grant');\r
+                       break;\r
+               case 'revoke':\r
+                       doModify('revoke');\r
+                       break;\r
                default:\r
                        doDefault();\r
                        break;\r