Skip to main content
Glama

OpenFGA MCP

SecurityGuidancePrompts.php15.7 kB
<?php declare(strict_types=1); namespace OpenFGA\MCP\Prompts; use OpenFGA\ClientInterface; use OpenFGA\MCP\Completions\{AuditFrequency, ComplianceFramework, RiskLevel, SecurityLevel, SystemCriticality, SystemType}; use PhpMcp\Server\Attributes\{CompletionProvider, McpPrompt}; final readonly class SecurityGuidancePrompts extends AbstractPrompts { public function __construct( /** * @phpstan-ignore property.onlyWritten */ private ClientInterface $client, ) { // Client is injected for dependency injection but may be used in future implementations } /** * Generate a prompt to design audit-friendly authorization patterns for compliance. * * @param string $auditRequirements Specific audit requirements (SOX, HIPAA, PCI-DSS, etc.) * @param string $auditFrequency How often audits are conducted (monthly, quarterly, annual) * @param string $systemCriticality Criticality of the system being audited (low, medium, high, critical) * @return array<int, array<string, string>> */ #[McpPrompt(name: 'audit_friendly_patterns')] public function auditFriendlyPatterns( #[CompletionProvider(enum: ComplianceFramework::class)] string $auditRequirements, #[CompletionProvider(enum: AuditFrequency::class)] string $auditFrequency = 'quarterly', #[CompletionProvider(enum: SystemCriticality::class)] string $systemCriticality = 'high', ): array { $error = $this->checkRestrictedMode(); if ($this->hasError($error)) { return $this->createErrorResponse($error); } $prompt = "Design audit-friendly authorization patterns in OpenFGA for compliance requirements: **Audit Requirements:** - Compliance Standard: {$auditRequirements} - Audit Frequency: {$auditFrequency} - System Criticality: {$systemCriticality} Please provide an audit-friendly authorization design: 1. **Audit Trail Design**: - Create comprehensive logging for all authorization decisions - Design immutable audit records for regulatory compliance - Implement real-time audit event capture 2. **Compliance Mapping**: - Map OpenFGA relations to {$auditRequirements} requirements - Ensure authorization model supports compliance controls - Design for regulatory reporting needs 3. **Access Documentation**: - Create clear documentation of all authorization patterns - Design self-documenting relation names and structures - Implement automated access rights reporting 4. **Segregation of Duties**: - Implement proper separation of duties controls - Design approval workflows for sensitive operations - Create conflict of interest prevention mechanisms 5. **Audit Reporting Capabilities**: - Design queries for {$auditFrequency} audit reporting - Create access certification and review processes - Implement automated compliance monitoring 6. **OpenFGA Model for Auditability**: - Design relations that clearly show access paths - Create audit-friendly inheritance patterns - Implement timestamped relationship tracking 7. **Compliance Controls**: - Implement controls specific to {$auditRequirements} - Design for {$systemCriticality} system protection requirements - Create evidence collection mechanisms 8. **Risk Assessment Integration**: - Design authorization patterns that support risk assessment - Implement risk-based access controls - Create risk monitoring and alerting capabilities 9. **Audit Preparation**: - Create audit preparation checklists and procedures - Design evidence collection and presentation processes - Implement audit trail validation mechanisms 10. **Continuous Compliance**: - Design for ongoing compliance monitoring - Implement automated compliance checking - Create exception handling and remediation processes 11. **Documentation Standards**: - Create comprehensive authorization documentation - Implement change management with audit trails - Design approval processes for model modifications Focus on creating authorization patterns that not only meet {$auditRequirements} compliance but also streamline the {$auditFrequency} audit process for a {$systemCriticality} criticality system."; return [ ['role' => 'user', 'content' => $prompt], ]; } /** * Generate a prompt to implement temporary and shared access patterns using OpenFGA. * * @param string $accessType Type of access pattern (temporary, shared, delegated, conditional) * @param string $businessContext Business context requiring special access * @param string $riskLevel Risk level of the access pattern (low, medium, high) * @return array<int, array<string, string>> */ #[McpPrompt(name: 'implement_access_patterns')] public function implementAccessPatterns( #[CompletionProvider(values: ['temporary', 'shared', 'delegated', 'conditional'])] string $accessType, string $businessContext, #[CompletionProvider(enum: RiskLevel::class)] string $riskLevel = 'medium', ): array { $error = $this->checkRestrictedMode(); if ($this->hasError($error)) { return $this->createErrorResponse($error); } $prompt = "Implement secure {$accessType} access patterns using OpenFGA's documented features: **Access Requirements:** - Access Type: {$accessType} - Business Context: {$businessContext} - Risk Level: {$riskLevel} Please provide an implementation using OpenFGA's core patterns: 1. **Using OpenFGA's Relationship Patterns**: - Implement {$accessType} access using direct relationships, concentric (or), or indirect (X from Y) patterns - Design appropriate relationship tuples for granting and revoking access - Use usersets for group-based {$accessType} access where appropriate 2. **Conditional Relations for Temporal Access**: - For temporary access, implement using conditional relationships with CEL expressions - Design time-based conditions (e.g., grant_expiry, valid_from, valid_until) - Show how to create conditional relationship tuples with context parameters 3. **Model Design for {$accessType} Access**: - Create type definitions that support {$accessType} access patterns - Define relations that clearly express the access intent - Use meaningful relation names (e.g., temporary_editor, shared_viewer) 4. **Using Custom Roles for Flexible Access**: - Implement {$accessType} access through custom role patterns if applicable - Show how role assignments can provide temporary or shared permissions - Design role-based access that can be easily granted and revoked 5. **Hierarchical Access Patterns**: - Use 'X from Y' pattern for inherited {$accessType} permissions - Design parent-child relationships that support access propagation - Implement organizational or resource hierarchies as needed 6. **Security Controls Using OpenFGA**: - Implement principle of least privilege through minimal relation grants - Use concentric relationships to ensure proper permission inheritance - Design relations that prevent privilege escalation 7. **Managing Access Lifecycle**: - Show how to grant {$accessType} access by creating relationship tuples - Demonstrate revocation by deleting specific tuples - For conditional access, show context-based enable/disable 8. **Testing with .fga.yaml**: - Provide comprehensive test cases for {$accessType} access scenarios - Include positive and negative test cases - Test access expiration and revocation scenarios 9. **Practical Implementation**: - Provide complete DSL model for the {$businessContext} use case - Show example relationship tuples for common scenarios - Include OpenFGA API calls for managing the access 10. **Risk Mitigation**: - Address {$riskLevel} risk through appropriate model design - Implement audit-friendly relation names and structures - Design for easy access review and compliance reporting Focus on using OpenFGA's documented patterns (direct, concentric, indirect 'X from Y', conditional, usersets) to implement secure {$accessType} access for {$businessContext}."; return [ ['role' => 'user', 'content' => $prompt], ]; } /** * Generate a prompt to implement principle of least privilege in authorization design. * * @param string $systemType Type of system (web app, API, enterprise, microservices) * @param string $userRoles Description of user roles and their responsibilities * @param string $sensitiveData Types of sensitive data that need protection * @return array<int, array<string, string>> */ #[McpPrompt(name: 'implement_least_privilege')] public function implementLeastPrivilege( #[CompletionProvider(enum: SystemType::class)] string $systemType, string $userRoles, string $sensitiveData = 'confidential business data', ): array { $error = $this->checkRestrictedMode(); if ($this->hasError($error)) { return $this->createErrorResponse($error); } $prompt = "Design an OpenFGA authorization model that implements the principle of least privilege for a {$systemType}: **System Context:** - System Type: {$systemType} - User Roles: {$userRoles} - Sensitive Data: {$sensitiveData} Please provide a least privilege implementation using OpenFGA's core features: 1. **Minimal Permission Analysis**: - Analyze each role's actual job requirements - Identify the minimum permissions needed for each function - Map requirements to specific OpenFGA relations 2. **Granular Relations Design**: - Create fine-grained relations using direct relationships [user] - Use separate relations for distinct operations (e.g., can_read, can_write, can_delete) - Avoid bundling unrelated permissions in single relations 3. **Controlled Inheritance with Concentric Relationships**: - Use 'or' operator carefully to avoid excessive permission grants - Design concentric relationships that follow principle of least privilege - Example: define can_read: [user] or can_write (writers can read, but not vice versa) 4. **Restricted Access Using Indirect Relationships**: - Implement 'X from Y' patterns for hierarchical access control - Ensure parent objects don't automatically grant all child permissions - Design selective inheritance patterns 5. **OpenFGA Model Implementation**: - Create type definitions with minimal default permissions - Use specific relation names that clearly indicate scope (e.g., can_view_summary vs can_view_details) - Implement separate relations for read and write operations 6. **Conditional Relations for Context-Aware Access**: - Use conditional relationships with CEL for time-based or context-dependent access - Implement conditions that restrict access based on business rules - Example: define admin: [user with active_hours_check] 7. **Usersets for Controlled Group Access**: - Use usersets (e.g., team#member) only when group access is truly needed - Avoid wildcard permissions (user:*) except for truly public resources - Design usersets that grant minimal necessary permissions 8. **Testing Least Privilege with .fga.yaml**: - Create test cases that verify users cannot exceed their intended permissions - Test that permission inheritance doesn't grant unintended access - Validate that each role has exactly the permissions needed 9. **Implementation Example**: - Provide complete DSL model demonstrating least privilege for {$userRoles} - Show relationship tuples that grant minimal necessary access - Include examples of what permissions are explicitly NOT granted Focus on using OpenFGA's patterns (direct, concentric 'or', indirect 'X from Y', conditional, usersets) to enforce least privilege for {$systemType} while protecting {$sensitiveData}."; return [ ['role' => 'user', 'content' => $prompt], ]; } /** * Generate a prompt to conduct a security review of an OpenFGA authorization model. * * @param string $model The OpenFGA DSL model to review * @param string $securityLevel Security requirements level (standard, high, critical) * @param string $complianceNeeds Compliance requirements (SOC2, HIPAA, PCI, GDPR, etc.) * @return array<int, array<string, string>> */ #[McpPrompt(name: 'security_review_model')] public function securityReviewModel( string $model, #[CompletionProvider(enum: SecurityLevel::class)] string $securityLevel = 'standard', #[CompletionProvider(enum: ComplianceFramework::class)] string $complianceNeeds = 'SOC2', ): array { $error = $this->checkRestrictedMode(); if ($this->hasError($error)) { return $this->createErrorResponse($error); } $prompt = "Conduct a comprehensive security review of the following OpenFGA authorization model: **Model to Review:** ``` {$model} ``` **Security Requirements:** - Security Level: {$securityLevel} - Compliance: {$complianceNeeds} Please provide a thorough security analysis: 1. **Access Control Vulnerabilities**: - Identify overly permissive relation definitions - Check for unintended privilege escalation paths - Analyze potential for unauthorized access 2. **Principle of Least Privilege**: - Verify that relations grant minimal necessary permissions - Check for excessive inheritance or broad access patterns - Recommend restrictions to tighten access control 3. **Separation of Duties**: - Ensure proper segregation of sensitive operations - Verify that critical actions require multiple approvals - Check for conflicts of interest in permission assignments 4. **Inheritance Security**: - Analyze inheritance chains for security vulnerabilities - Check for unintended permission propagation - Verify that inheritance doesn't bypass security controls 5. **Administrative Access**: - Review administrative and superuser permissions - Ensure proper controls on high-privilege accounts - Check for secure delegation patterns 6. **Compliance Alignment ({$complianceNeeds})**: - Verify model meets {$complianceNeeds} requirements - Check for necessary audit trails and logging capabilities - Ensure data access controls align with compliance standards 7. **Security Best Practices**: - Apply OpenFGA security best practices - Recommend security hardening measures - Identify potential security anti-patterns 8. **Threat Modeling**: - Consider potential attack vectors against the authorization model - Analyze risks from insider threats - Evaluate external threat scenarios 9. **Remediation Recommendations**: - Provide specific model changes to address security issues - Prioritize security fixes by risk level - Suggest implementation timeline for security improvements Focus on practical security improvements that enhance protection while maintaining usability for {$securityLevel} security requirements."; return [ ['role' => 'user', 'content' => $prompt], ]; } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/evansims/openfga-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server