# LDAP Groups Sync Módulo base que provê a infraestrutura compartilhada de **regras de acesso** para os módulos de sincronização LDAP de grupos. Não realiza sincronização por si só — funciona como biblioteca de classes abstratas instanciada pelos sub-módulos que ficam dentro deste repositório. ## Sub-módulos incluídos | Módulo | Tipo de grupo | Rota de configuração | |---|---|---| | `ldap_departments_sync` | `departments` | `/admin/config/local-modules/ldap-departments-sync` | | `ldap_research_groups_sync` | `research_group` | `/admin/config/local-modules/ldap-research-groups-sync` | ## Estrutura ``` ldap_groups_sync/ ├── src/ │ ├── GroupAccessRulesService.php # serviço de verificação de acesso │ └── Form/ │ ├── AccessRulesFormBase.php # listagem e remoção de regras │ └── AccessRuleFormBase.php # criação/edição de regra (modal) ├── translations/ │ └── ldap_groups_sync.pt-br.po │ ├── ldap_departments_sync/ # sub-módulo └── ldap_research_groups_sync/ # sub-módulo ``` ## Regras de acesso A infraestrutura de regras de acesso permite configurar, por interface, quais operações (`create`, `update`, `delete`, `view`) cada entidade permite — e a quais membros de grupo com quais papéis. Cada regra define: - **Tipo de entidade / bundle** ao qual se aplica - **Operações** controladas - **Modo**: _Restritivo_ (nega quem não satisfaz) ou _Aditivo_ (só concede, sem negar) - **Requisitos de membro**: um ou mais pares (grupo + papéis requeridos) - **Condições de campo** opcionais avaliadas sobre a entidade existente (para `update`/`delete`/`view`) ## Como adicionar um novo sub-módulo 1. Crie o diretório do módulo dentro de `ldap_groups_sync/`. 2. Declare `ldap_groups_sync:ldap_groups_sync` como dependência no `.info.yml`. 3. No `.services.yml`, use `GroupAccessRulesService` com o config name como terceiro argumento: ```yaml meu_modulo.access_rules: class: Drupal\ldap_groups_sync\GroupAccessRulesService arguments: ['@config.factory', '@entity_type.manager', 'meu_modulo.settings'] ``` 4. Crie `src/Form/AccessRulesForm.php` estendendo `AccessRulesFormBase`: ```php namespace Drupal\meu_modulo\Form; use Drupal\ldap_groups_sync\Form\AccessRulesFormBase; class AccessRulesForm extends AccessRulesFormBase { protected function getConfigName(): string { return 'meu_modulo.settings'; } public function getFormId(): string { return 'meu_modulo_access_rules_form'; } protected function getAccessRuleFormRoute(): string { return 'meu_modulo.access_rule_form'; } } ``` 5. Crie `src/Form/AccessRuleForm.php` estendendo `AccessRuleFormBase`: ```php namespace Drupal\meu_modulo\Form; use Drupal\ldap_groups_sync\Form\AccessRuleFormBase; class AccessRuleForm extends AccessRuleFormBase { protected function getConfigName(): string { return 'meu_modulo.settings'; } public function getFormId(): string { return 'meu_modulo_access_rule_form'; } protected function getAccessRulesRoute(): string { return 'meu_modulo.access_rules'; } protected function getDefaultGroupTypeId(): string { return 'meu_group_type'; } } ``` ## Dependências - `drupal:options` - `drupal:telephone` - `group:group` - `ldap:ldap_servers` - `site_tools` ## Licença GPL-2.0-or-later ## Autor Desenvolvido para o IME - UNICAMP