--- name: perfex-permissions description: Sistema de permissões Perfex CRM — staff_can(), register_staff_capabilities(), controlo de acesso e roles. Baseado apenas na documentação oficial. layer: wiki --- # /perfex-permissions - Permissões Perfex CRM Sistema de permissões e controlo de acesso. **Zero assumptions, zero hallucinations** - apenas documentação oficial. --- ## Documentação Base - [Staff Capabilities and Access](https://help.perfexcrm.com/staff-capabilities-and-access/) - [Roles](https://help.perfexcrm.com/roles/) --- ## Conceitos Fundamentais | Conceito | Descrição | |----------|-----------| | **Feature** | Área funcional (invoices, projects, meu_modulo) | | **Capability** | Permissão específica (view, create, edit, delete) | | **Role** | Conjunto de permissões pré-definido | --- ## Registar Permissões do Módulo ### No Init File ```php hooks()->add_action('admin_init', 'meu_modulo_register_permissions'); function meu_modulo_register_permissions() { $capabilities = []; $capabilities['capabilities'] = [ 'view' => _l('permission_view'), // Ver 'create' => _l('permission_create'), // Criar 'edit' => _l('permission_edit'), // Editar 'delete' => _l('permission_delete'), // Apagar ]; register_staff_capabilities( 'meu_modulo', // Feature ID (único) $capabilities, // Array de capabilities _l('meu_modulo_title') // Nome do módulo (mostrado em Settings) ); } ``` ### Parâmetros register_staff_capabilities() | Parâmetro | Tipo | Descrição | |-----------|------|-----------| | `$feature` | string | ID único da feature | | `$capabilities` | array | Array com key 'capabilities' | | `$name` | string | Nome mostrado na UI | --- ## Verificar Permissões: staff_can() ### Sintaxe ```php staff_can($capability, $feature = null, $staff_id = ''); ``` ### Parâmetros | Parâmetro | Tipo | Descrição | |-----------|------|-----------| | `$capability` | string | Nome da capability (view, create, etc.) | | `$feature` | string | Feature ID (recomendado SEMPRE passar) | | `$staff_id` | int | ID do staff (default: staff logado) | ### Retorno - `true` - Staff tem permissão - `false` - Staff não tem permissão **NOTA:** Administradores SEMPRE retornam `true` (bypass total). --- ## Exemplos de Uso ### No Controller ```php class Meu_modulo extends AdminController { public function index() { // Verificar permissão de ver if (!staff_can('view', 'meu_modulo')) { access_denied('meu_modulo'); } // ... código } public function create() { // Verificar permissão de criar if (!staff_can('create', 'meu_modulo')) { access_denied('meu_modulo'); } // ... código } public function edit($id) { // Verificar permissão de editar if (!staff_can('edit', 'meu_modulo')) { access_denied('meu_modulo'); } // ... código } public function delete($id) { // Verificar permissão de apagar if (!staff_can('delete', 'meu_modulo')) { access_denied('meu_modulo'); } // ... código } } ``` ### Na View ```php