Here is a few ideas I have been playing with:

We have a permissions cascade, senior_admin creates group_admins who create 
users

accounts are 'owned' by users who are 'owned' by group_admin(s) who are 
'owned' by senior_admin

These 3 control who gets to see what

We (as senior_admin) want to allow certain privileges to some 
group_admins/users, eg who gets to *do* what

This could go in config.php
# define some constants, easier than remembering numbers ;-)
define("ALLOW_LOGIN", "1");
define("ADD_DOMAIN", "2");
define("ADD_RECORD", "3");
define("ADD_ACCOUNT", "4");
define("ADD_DEFAULT_RECORD", "5");
define("EDIT_DOMAIN", "6");
define("EDIT_RECORD", "7");
define("EDIT_ACCOUNT", "8");
define("EDIT_DEFAULT_RECORD", "9");
define("DELETE_DOMAIN", "10");
define("DELETE_RECORD", "11");
define("DELETE_ACCOUNT", "12");
define("DELETE_DEFAULT_RECORD", "13");
define("COMMIT_DOMAIN", "14");
define("COMMIT_RECORD", "15");
define("COMMIT_ACCOUNT", "16");
define("COMMIT_DEFAULT_RECORD", "17");

# default permissions array
$defaultpermissioninfo = array(
 "user"=>array
  (
   ALLOW_LOGIN
  ),
 "group_admin"=>array
  (
   ALLOW_LOGIN,
   ADD_DOMAIN,
   ADD_RECORD,
   ADD_ACCOUNT,
   ADD_DEFAULT_RECORD,
   EDIT_DOMAIN,
   EDIT_RECORD,
   EDIT_ACCOUNT,
   EDIT_DEFAULT_RECORD,
   DELETE_DOMAIN,
   DELETE_RECORD,
   DELETE_ACCOUNT,
   DELETE_DEFAULT_RECORD
  ),
 "senior_admin"=>array
  (
   ALLOW_LOGIN,
   ADD_DOMAIN,
   ADD_RECORD,
   ADD_ACCOUNT,
   ADD_DEFAULT_RECORD,
   EDIT_DOMAIN,
   EDIT_RECORD,
   EDIT_ACCOUNT,
   EDIT_DEFAULT_RECORD,
   DELETE_DOMAIN,
   DELETE_RECORD,
   DELETE_ACCOUNT,
   DELETE_DEFAULT_RECORD,
   COMMIT_DOMAIN,
   COMMIT_RECORD,
   COMMIT_ACCOUNT,
   COMMIT_DEFAULT_RECORD
  )
);

Then create some more tables:

# list of permissions
CREATE TABLE permission (
  ID int(11) NOT NULL auto_increment,
  Name varchar(255) default NULL,
  PRIMARY KEY  (ID)
) TYPE=MyISAM;

INSERT INTO permission VALUES (1, 'Allow Login');
INSERT INTO permission VALUES (2, 'Add Domain');
INSERT INTO permission VALUES (3, 'Add Record');
INSERT INTO permission VALUES (4, 'Add Account');
INSERT INTO permission VALUES (5, 'Add Default Record');
INSERT INTO permission VALUES (6, 'Edit Domain');
INSERT INTO permission VALUES (7, 'Edit Record');
INSERT INTO permission VALUES (8, 'Edit Account');
INSERT INTO permission VALUES (9, 'Edit Default Record');
INSERT INTO permission VALUES (10, 'Delete Domain');
INSERT INTO permission VALUES (11, 'Delete Record');
INSERT INTO permission VALUES (12, 'Delete Account');
INSERT INTO permission VALUES (13, 'Delete Default Record');
INSERT INTO permission VALUES (14, 'Commit Domain');
INSERT INTO permission VALUES (15, 'Commit Record');
INSERT INTO permission VALUES (16, 'Commit Account');
INSERT INTO permission VALUES (17, 'Commit Default Record');


# table to hold who gets what
CREATE TABLE user_permission (
  User int(11) default NULL,
  Permission int(11) default NULL
) TYPE=MyISAM;

# give all to senior_admin by default
INSERT INTO user_permission VALUES (1, 1);
INSERT INTO user_permission VALUES (1, 2);
INSERT INTO user_permission VALUES (1, 3);
INSERT INTO user_permission VALUES (1, 4);
INSERT INTO user_permission VALUES (1, 5);
INSERT INTO user_permission VALUES (1, 6);
INSERT INTO user_permission VALUES (1, 7);
INSERT INTO user_permission VALUES (1, 8);
INSERT INTO user_permission VALUES (1, 9);
INSERT INTO user_permission VALUES (1, 10);
INSERT INTO user_permission VALUES (1, 11);
INSERT INTO user_permission VALUES (1, 12);
INSERT INTO user_permission VALUES (1, 13);
INSERT INTO user_permission VALUES (1, 14);
INSERT INTO user_permission VALUES (1, 15);
INSERT INTO user_permission VALUES (1, 16);
INSERT INTO user_permission VALUES (1, 17);

a function for functions.php
# get user permissions
function get_user_perms($id) {
 
 # get permissions for this login
 $q = "SELECT Permission FROM user_permission WHERE User='$id'";
 $result = mysql_query($q) or die(mysql_error() . " $q");
 
 $out = array();
 while ($row = mysql_fetch_array($result)) {
  $out[$row['Permission']] = TRUE;
 } 
 return $out;
}

The above function could be used to create an array

$user_perms_info = get_user_perms($user_info['cid']);

I also would like to propose creating some tables to store pending changes, eg
pending_records, pending_domains, pending_accounts and 
pending_user_permissions

Then someone can add/edit/delete things without the original being lost, and 
the changes applied by someone having COMMIT_* privileges, once the changes 
have been checked for sensible values

So if we want to check if the current login had permission to say edit a 
record
if( $user_perms_info[EDIT_RECORD] ) {
 # show the edit form
}
else {
 # do not have permission etc
}

and when it comes to writing to the db

if( $user_perms_info[COMMIT_RECORD] ) {
 # write to records
}
else {
 # put the proposed changes into pending_records
}

This would require changes in records.php, domains.php and accounts.php as 
well as their templates, and the account_form.php to add the new privileges

The main page, currently unused, could display any work pending, with links to 
edit the requested changes and commit them.

Comments of course welcome.

-- 
-----------------
Bob Hutchinson
Midwales dot com
-----------------

Reply via email to