1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| from typing import Callable, TypeVar, Any from functools import wraps
T = TypeVar('T')
class PermissionChecker: """权限检查器"""
def __init__(self, required_permission: str): self.required_permission = required_permission
def check(self, user_permission: str) -> bool: return self.required_permission == user_permission
class PermissionDecorator: """权限装饰器"""
def __init__(self, permission: str): self.permission = permission
def __call__(self, func: Callable[..., T]) -> Callable[..., T]: @wraps(func) def wrapper(*args, **kwargs): user_permission = kwargs.get('permission', 'guest') checker = PermissionChecker(self.permission)
if checker.check(user_permission): return func(*args, **kwargs) else: raise PermissionError(f"需要 {self.permission} 权限")
return wrapper
@PermissionDecorator("admin") def delete_user(user_id: int, **kwargs) -> str: return f"用户 {user_id} 已删除"
@PermissionDecorator("user") def view_profile(user_id: int, **kwargs) -> str: return f"查看用户 {user_id} 的资料"
def main(): try: result = view_profile(123, permission="user") print(result)
delete_user(456, permission="guest") except PermissionError as e: print(f"错误: {e}")
if __name__ == "__main__": main()
|