SecurityGuidancePrompts.php•15.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],
];
}
}