Admin Export Permission Gate
Checks whether an admin can export a given dataset and whether fields must be redacted.
Function signature
ogAuthorizeAdminExport(admin_role, export_type, requested_fields = array(), policy = array())
Categories
- Security
Parameters
admin_roleCurrent admin role already resolved by the caller.export_typeApproved export type being requested.requested_fieldsField list requested for export authorization and redaction review.policyCaller-approved workflow policy for the ecommerce, admin, privacy, or export decision.Return value
Public-safe status string returned by the function for explicit controller branching or logging.
- success
- message
- data
Compatibility
Existing function name, slug, path, and call order preserved; advertised metadata corrected to the actual source behavior.
Minimum PHP version: 7.4
Security notes
Use caller-owned allowlists and context-specific escaping; validate admin actions, export fields, privacy plans, cache keys, templates, settings, routes, and ecommerce policies before production use.
Code
<?php
/*
* Copyright (c) 2026 Jeffery L. Paris <jparis@phpog.com>.
* Free for personal and internal use. Paid project use requires visible credit
* to Jeffery L. Paris. Corporate use requires a paid license fee unless a
* separate written license states otherwise.
*/
/**
* Checks whether an admin can export a dataset and returns the allowed export fields.
*
* This function only authorizes and describes the export. It does not run a query,
* stream a file, or expose data. Sensitive fields are redacted unless policy permits them.
*
* @param string $admin_role Current administrator role.
* @param string $export_type Dataset/export key.
* @param array $requested_fields Requested field names.
* @param array $policy Export policy map.
* @return array Export authorization result.
*/
function ogAuthorizeAdminExport($admin_role, $export_type, $requested_fields = array(), $policy = array()) {
$result = array(
'success' => false,
'message' => '',
'data' => array()
);
$admin_role = strtolower(trim((string)$admin_role));
$export_type = strtolower(trim((string)$export_type));
if (!is_array($requested_fields)) {
$requested_fields = array();
}
if (!is_array($policy)) {
$policy = array();
}
if (empty($admin_role)) {
$result['message'] = 'Missing admin role.';
return $result;
}
if (empty($export_type)) {
$result['message'] = 'Missing export type.';
return $result;
}
$role_exports = array();
if (!empty($policy['role_exports']) && is_array($policy['role_exports'])) {
$role_exports = $policy['role_exports'];
}
$export_fields = array();
if (!empty($policy['export_fields']) && is_array($policy['export_fields'])) {
$export_fields = $policy['export_fields'];
}
$sensitive_fields = array('password', 'password_hash', 'token', 'secret', 'api_key', 'session_id', 'csrf_token');
if (!empty($policy['sensitive_fields']) && is_array($policy['sensitive_fields'])) {
$sensitive_fields = $policy['sensitive_fields'];
}
$allow_sensitive = false;
if (!empty($policy['allow_sensitive']) && $policy['allow_sensitive'] === true) {
$allow_sensitive = true;
}
$allowed_export = false;
if (!empty($role_exports[$admin_role]) && is_array($role_exports[$admin_role])) {
if (in_array($export_type, $role_exports[$admin_role], true)) {
$allowed_export = true;
}
}
if (!$allowed_export) {
$result['message'] = 'Export is not authorized for this admin role.';
$result['data'] = array(
'allowed' => false,
'allowed_fields' => array(),
'redacted_fields' => array()
);
return $result;
}
$available_fields = array();
if (!empty($export_fields[$export_type]) && is_array($export_fields[$export_type])) {
$available_fields = $export_fields[$export_type];
}
$allowed_fields = array();
$redacted_fields = array();
foreach ($requested_fields as $field) {
$field = trim((string)$field);
if (empty($field)) {
continue;
}
if (!empty($available_fields) && !in_array($field, $available_fields, true)) {
continue;
}
if (in_array($field, $sensitive_fields, true) && !$allow_sensitive) {
$redacted_fields[] = $field;
continue;
}
$allowed_fields[] = $field;
}
if (empty($requested_fields)) {
foreach ($available_fields as $field) {
$field = trim((string)$field);
if (in_array($field, $sensitive_fields, true) && !$allow_sensitive) {
$redacted_fields[] = $field;
continue;
}
$allowed_fields[] = $field;
}
}
$result['success'] = true;
$result['message'] = 'Export authorization completed.';
$result['data'] = array(
'allowed' => true,
'export_type' => $export_type,
'allowed_fields' => array_values(array_unique($allowed_fields)),
'redacted_fields' => array_values(array_unique($redacted_fields))
);
return $result;
}