'''
def role_required(allowed_roles):
"""基于角色的权限控制装饰器"""
def decorator(cls):
class Wrapper(cls):
def init(self, args, role='guest', **kwargs):
super().init(args, **kwargs)
self.role = role
def __getattribute__(self, name):
method = super().__getattribute__(name)
if callable(method) and name.startswith('admin_'):
def permission_wrapper(*args, **kwargs):
if self.role not in allowed_roles:
raise PermissionError(f"需要 {allowed_roles} 权限,当前是 {self.role}")
return method(*args, **kwargs)
return permission_wrapper
return method
return Wrapper
return decorator
@role_required(allowed_roles=['admin', 'supervisor'])
class AdminPanel:
def admin_delete_user(self, user_id):
print(f"用户 {user_id} 已删除")
def admin_create_user(self, username):
print(f"用户 {username} 已创建")
def view_users(self):
print("查看用户列表")
if name == "main":
# 使用
admin = AdminPanel(role='editor')
try:
admin.admin_delete_user(101)
except PermissionError as e:
print(f"权限错误: {e}")
admin.view_users() # 不需要权限的方法
'''