Um sistema flexível e poderoso de gerenciamento de permissões para aplicativos Flutter com controle de acesso baseado em funções, permissões hierárquicas e componentes de interface personalizáveis.
Orientação gerada a partir de informações públicas. Apenas para referência.
PermissionPolicy é um sistema robusto de gerenciamento de permissões para aplicativos Flutter, permitindo controle de acesso baseado em funções e permissões hierárquicas. Oferece componentes de interface personalizáveis para gerenciar o acesso do usuário dinamicamente. Projetado para aplicações voltadas para segurança, suporta Android, iOS e macOS, oferecendo aos desenvolvedores controle granular sobre quem pode realizar ações específicas dentro do app. O pacote se integra perfeitamente aos fluxos de trabalho existentes e melhora a segurança do app por meio de lógica estruturada de permissões.
Casos de uso
Gerenciamento de papéis de usuário em painéis administrativos
Controlar o acesso a recursos sensíveis
Implementação de acesso de usuário em múltiplas camadas
Protegendo chamadas de API do backend
Gerenciando permissões de nível de aplicativo
Aplicando regras de política em tempo de execução
Principais recursos
Controle de acesso baseado em função
Estrutura hierárquica de permissão
Componentes de interface personalizáveis
Suporte multiplataforma (Android, iOS, macOS)
Avaliação dinâmica de permissão
Integração fácil com aplicativos Flutter
Indicado para
Aplicações Flutter de nível corporativo
Aplicativos que exigem controles de acesso rigorosos
Painéis de controle administrativos com papéis de usuário
Aplicativos móveis focados em segurança
Desenvolvedores que precisam de sistemas flexíveis de permissão
Equipes gerenciando hierarquias de usuários complexas
Considerações
Requer a definição de papéis e permissões desde o início
Pode ser necessário ajustes personalizados na interface
Depende da configuração correta da hierarquia de permissões
Mais adequado para aplicativos com níveis de acesso definidos
Configuração adicional para políticas dinâmicas
Não ideal para aplicativos simples de um único usuário
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
Permission Policy for Flutter
A powerful and flexible permission management system for Flutter applications with device-level role-based access control (RBAC), hierarchical permissions, and customizable UI components.
Features
Type-safe models - Permission and Role with full serialization support
Hierarchical permissions - Permissions can inherit from other permissions
Role inheritance - Roles can inherit permissions from other roles
Device-level roles - Assign roles directly to the device — no user identity required
Detailed results - PermissionResult includes the reason, contributing roles, and permissions
Pluggable storage - Implement PermissionStorage for any backend (default uses Nylo local storage)
Performance caching - Resolved permissions are cached and automatically invalidated on changes
UI components - PermissionGuard, PermissionBuilder, and RoleSelector
A Permission represents a specific action or access right. Permissions can inherit from other permissions using inheritsFrom - granting a permission automatically includes its parents.
A Role groups permissions together and can inherit from other roles. Use isAssignable to control whether a role appears in selectors, and isSystem to mark roles that shouldn't be deleted.
Permissions are resolved purely through roles. The device has a list of role IDs, and the system resolves all permissions by walking the role and permission inheritance chains.
API Reference
Checking Permissions
final policy = PermissionPolicy.instance;
// Simple boolean checkbool canEdit = await policy.hasPermission('edit_posts');
// Check any of multiple permissionsbool canManage = await policy.hasAnyPermission(['edit_posts', 'delete_posts']);
// Check all permissions are grantedbool fullAccess = await policy.hasAllPermissions(['read_posts', 'write_posts', 'delete_posts']);
Detailed Permission Results
Use checkPermission to get a PermissionResult with the reason and contributing factors:
PermissionResult result = await policy.checkPermission('edit_posts');
print(result.granted); // true or falseprint(result.reason); // e.g. 'Permission granted through roles'print(result.contributingRoles); // e.g. ['editor']print(result.contributingPermissions); // e.g. ['edit_posts']// Also available for multiple checksPermissionResult anyResult = await policy.checkAnyPermission(['edit_posts', 'delete_posts']);
PermissionResult allResult = await policy.checkAllPermissions(['read_posts', 'write_posts']);
Managing Roles
// Give a role to the deviceawait policy.giveRole('editor');
// Remove a roleawait policy.removeRole('editor');
// Check rolesbool isAdmin = await policy.hasRole('admin');
bool hasEditAccess = await policy.hasAnyRole(['editor', 'admin']);
bool isSuperMod = await policy.hasAllRoles(['moderator', 'admin']);
// Get the device's rolesList<String> roleIds = await policy.getDeviceRoles();
// Get all available rolesList<Role> allRoles = await policy.getRoles();
// Get only assignable roles (isAssignable == true)List<Role> assignable = await policy.getAssignableRoles();
// Get all resolved permissions for the deviceSet<String> allPermissions = await policy.getDevicePermissions();
// Clear all device rolesawait policy.clearRoles();
// Clear everything (permissions, roles, and device roles)await policy.clearAll();
Widgets
PermissionGuard
Conditionally renders a widget based on permissions or roles. Shows the child when granted and the fallback when denied.
RoleSelectorStyle supports customizing spacing, selectedColor, backgroundColor, titleStyle, subtitleStyle, scrollPhysics, and for cards: crossAxisCount and childAspectRatio.
Advanced Usage
Permission Inheritance
Build hierarchical permission structures where higher-level permissions automatically include lower-level ones: