Spaces:
Paused
Paused
| import hashlib | |
| from typing import Dict, Optional | |
| class AuthSystem: | |
| """Authentication and role management system""" | |
| def __init__(self): | |
| # Demo users with hashed passwords | |
| # In production, this would be stored in a secure database | |
| self.users = { | |
| "tony.finance": { | |
| "password_hash": self._hash_password("password123"), | |
| "role": "Finance", | |
| "full_name": "Tony Sharma", | |
| "department": "Finance" | |
| }, | |
| "sarah.marketing": { | |
| "password_hash": self._hash_password("password123"), | |
| "role": "Marketing", | |
| "full_name": "Sarah Johnson", | |
| "department": "Marketing" | |
| }, | |
| "mike.hr": { | |
| "password_hash": self._hash_password("password123"), | |
| "role": "HR", | |
| "full_name": "Mike Wilson", | |
| "department": "Human Resources" | |
| }, | |
| "peter.engineering": { | |
| "password_hash": self._hash_password("password123"), | |
| "role": "Engineering", | |
| "full_name": "Peter Pandey", | |
| "department": "Engineering" | |
| }, | |
| "ceo.admin": { | |
| "password_hash": self._hash_password("password123"), | |
| "role": "C-Level", | |
| "full_name": "CEO Admin", | |
| "department": "Executive" | |
| }, | |
| "john.employee": { | |
| "password_hash": self._hash_password("password123"), | |
| "role": "Employee", | |
| "full_name": "John Doe", | |
| "department": "General" | |
| } | |
| } | |
| # Role-based access permissions - using embedded document content identifiers | |
| self.role_permissions = { | |
| "Finance": { | |
| "documents": ["financial_reports", "expense_data", "budget_info"], | |
| "keywords": ["revenue", "financial", "profit", "sales", "budget", "expenses", "cost"], | |
| "description": "Access to financial reports, budgets, and expense data" | |
| }, | |
| "Marketing": { | |
| "documents": ["marketing_reports", "campaign_data", "customer_metrics"], | |
| "keywords": ["marketing", "campaign", "customer", "roi", "acquisition", "conversion"], | |
| "description": "Access to marketing campaigns, performance metrics, and customer data" | |
| }, | |
| "HR": { | |
| "documents": ["employee_data", "hr_policies", "attendance_records"], | |
| "keywords": ["employee", "hr", "policy", "leave", "attendance", "benefits", "payroll"], | |
| "description": "Access to employee data, policies, and HR processes" | |
| }, | |
| "Engineering": { | |
| "documents": ["technical_docs", "architecture", "development_processes"], | |
| "keywords": ["architecture", "technology", "system", "development", "engineering", "technical"], | |
| "description": "Access to technical documentation and system architecture" | |
| }, | |
| "C-Level": { | |
| "documents": ["financial_reports", "marketing_reports", "employee_data", "technical_docs", "all_data"], | |
| "keywords": ["all", "company", "overview", "performance", "metrics", "strategy"], | |
| "description": "Full access to all company data and reports" | |
| }, | |
| "Employee": { | |
| "documents": ["general_policies", "company_info", "benefits"], | |
| "keywords": ["policy", "benefits", "company", "general", "handbook", "leave"], | |
| "description": "Access to general company policies and employee information" | |
| } | |
| } | |
| def _hash_password(self, password: str) -> str: | |
| """Hash password using SHA-256""" | |
| return hashlib.sha256(password.encode()).hexdigest() | |
| def authenticate(self, username: str, password: str) -> bool: | |
| """Authenticate user credentials""" | |
| if username not in self.users: | |
| return False | |
| password_hash = self._hash_password(password) | |
| return self.users[username]["password_hash"] == password_hash | |
| def get_user_role(self, username: str) -> Optional[str]: | |
| """Get user role""" | |
| if username not in self.users: | |
| return None | |
| return self.users[username]["role"] | |
| def get_user_info(self, username: str) -> Optional[Dict]: | |
| """Get user information""" | |
| if username not in self.users: | |
| return None | |
| user_info = self.users[username].copy() | |
| # Remove password hash for security | |
| del user_info["password_hash"] | |
| return user_info | |
| def get_role_permissions(self, role: str) -> Dict: | |
| """Get permissions for a specific role""" | |
| return self.role_permissions.get(role, {}) | |
| def can_access_content(self, role: str, content_type: str) -> bool: | |
| """Check if a role can access specific content""" | |
| permissions = self.get_role_permissions(role) | |
| allowed_docs = permissions.get("documents", []) | |
| return content_type in allowed_docs or "all_data" in allowed_docs | |
| def get_accessible_documents(self, role: str) -> list: | |
| """Get list of documents accessible to a role""" | |
| permissions = self.get_role_permissions(role) | |
| return permissions.get("documents", []) | |
| def get_role_keywords(self, role: str) -> list: | |
| """Get keywords relevant to a role for better content filtering""" | |
| permissions = self.get_role_permissions(role) | |
| return permissions.get("keywords", []) |