/** * Filter editible roles * * Get the highest curent User's Level (from 1 to 10) and filter all User * Roles which have higher Level. This is used for promotion feature * In fact that Administrator Role has the higherst 10th Level, this function * introduces the virtual 11th Level for Super Admin * * @param array $roles * @return array Filtered Role List */ public function editable_roles($roles) { if (isset($roles[WPACCESS_SADMIN_ROLE])) { //super admin is level 11 unset($roles[WPACCESS_SADMIN_ROLE]); } if (isset($roles['_visitor'])) { unset($roles['_visitor']); } //get user's highest Level $caps = mvb_Model_AccessControl::getUserConf()->getUser()->getAllCaps(); $highest = mvb_Model_Helper::getHighestUserLevel($caps); if ($highest < WPACCESS_TOP_LEVEL && is_array($roles)) { //filter roles foreach ($roles as $role => $data) { if ($highest < mvb_Model_Helper::getHighestUserLevel($data['capabilities'])) { unset($roles[$role]); } } } return $roles; }