function check_document_permissions_on_startup
Validates and fixes document permission issues during application startup, prioritizing active documents (DRAFT, IN_REVIEW, IN_APPROVAL) to ensure proper sharing permissions are configured.
/tf/active/vicechatdev/CDocs/utils/sharing_validator.py
172 - 227
moderate
Purpose
This function is designed to be called during application initialization to perform a comprehensive check of document permissions. It focuses first on active documents (those in DRAFT, IN_REVIEW, or IN_APPROVAL status) as these are most critical for ongoing operations. The function can automatically fix permission issues if enabled, and returns detailed statistics about the validation process including counts of processed documents, issues found, and fixes applied.
Source Code
def check_document_permissions_on_startup(fix_issues: bool = True) -> Dict[str, Any]:
"""
Run the document permission validation on application startup.
This is the function that should be called during application initialization.
Parameters
----------
fix_issues : bool, optional
If True, attempt to fix any permission issues found (default: True)
Returns
-------
Dict[str, Any]
Summary of validation results
"""
logger.info("Initializing document sharing validation on startup")
# For startup, first focus on active documents (most important to fix)
active_statuses = ["DRAFT", "IN_REVIEW", "IN_APPROVAL"]
try:
# Start with active documents
active_stats = validate_and_fix_document_permissions(
batch_size=50,
status_filter=active_statuses,
fix_issues=fix_issues
)
# Then process all other documents if needed
other_stats = {
"processed_documents": 0,
"permission_issues": 0,
"fixed_issues": 0,
"errors": 0
}
# Combine stats
stats = {
"active_documents": active_stats,
"other_documents": other_stats,
"total_processed": active_stats["processed_documents"] + other_stats["processed_documents"],
"total_fixed": active_stats["fixed_issues"] + other_stats["fixed_issues"],
"total_errors": active_stats["errors"] + other_stats["errors"],
"startup_time": datetime.now().isoformat()
}
logger.info(f"Document sharing validation complete. Fixed {stats['total_fixed']} permission issues.")
return stats
except Exception as e:
logger.error(f"Error during startup document sharing validation: {e}")
return {
"error": str(e),
"success": False,
"startup_time": datetime.now().isoformat()
}
Parameters
| Name | Type | Default | Kind |
|---|---|---|---|
fix_issues |
bool | True | positional_or_keyword |
Parameter Details
fix_issues: Boolean flag that controls whether the function should attempt to automatically fix any permission issues it discovers. When True (default), the function will correct permission problems. When False, it only reports issues without making changes. This is useful for dry-run scenarios or when you want to review issues before applying fixes.
Return Value
Type: Dict[str, Any]
Returns a dictionary containing comprehensive validation results. On success, includes: 'active_documents' (stats for active document processing), 'other_documents' (stats for remaining documents), 'total_processed' (total number of documents checked), 'total_fixed' (total permission issues corrected), 'total_errors' (count of errors encountered), and 'startup_time' (ISO format timestamp of when validation completed). On error, returns a dictionary with 'error' (error message string), 'success' (False), and 'startup_time'. Each stats object contains 'processed_documents', 'permission_issues', 'fixed_issues', and 'errors' counts.
Dependencies
loggingdatetimetyping
Required Imports
import logging
from typing import Dict, Any
from datetime import datetime
from CDocs.models.document import ControlledDocument
from CDocs.models.document import DocumentVersion
from CDocs.models.user_extensions import DocUser
from CDocs.controllers.share_controller import manage_document_permissions
from CDocs.db.schema_manager import NodeLabels
from CDocs.db.schema_manager import RelTypes
from CDocs import db
Usage Example
# During application startup
from your_module import check_document_permissions_on_startup
# Run with automatic fixing (recommended for startup)
results = check_document_permissions_on_startup(fix_issues=True)
print(f"Processed {results['total_processed']} documents")
print(f"Fixed {results['total_fixed']} permission issues")
if results['total_errors'] > 0:
print(f"Encountered {results['total_errors']} errors")
# Run in dry-run mode (only report issues)
results = check_document_permissions_on_startup(fix_issues=False)
print(f"Found {results['active_documents']['permission_issues']} issues in active documents")
# Check for errors
if 'error' in results:
print(f"Validation failed: {results['error']}")
Best Practices
- Call this function during application startup/initialization, not during runtime request handling
- Use fix_issues=True in production to automatically correct permission issues during startup
- Use fix_issues=False for dry-run testing or when you want to review issues before applying fixes
- Monitor the returned statistics to track permission health over time
- Ensure proper logging is configured before calling this function to capture detailed validation information
- Handle the error case by checking for 'error' key in the returned dictionary
- Consider the startup time impact - this function processes documents in batches but may take time for large document sets
- The function prioritizes active documents (DRAFT, IN_REVIEW, IN_APPROVAL) which are most critical for ongoing operations
- Ensure database connection is established before calling this function
- Review logs after startup to identify any recurring permission issues that may indicate systemic problems
Tags
Similar Components
AI-powered semantic similarity - components with related functionality:
-
function check_document_permissions_on_startup_v1 80.5% similar
-
function validate_and_fix_document_permissions 73.5% similar
-
function run_permission_check_async 68.4% similar
-
function initialize_system 61.8% similar
-
function get_document_permissions 59.5% similar