重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
题意:
假设已经存在函数 get_permissions可以获取当前用户的权限列表, 设计一个权限管理类,既可以作为装饰器,对一个函数授权,也可以作为上下文管理,对一段代码授权
例如
permissions = get_permissions()
if 'admin' in permissions:
## do somthings
else:
raise Exception('Permissions denied')
分析:
权限检查的一般都是用装饰器的方法实现
demo:
def get_permissions():
return "root"
class Requrie:
def __init__(self,permissions):
self.permissions = permissions
def check(self):
if len(set(self.permissions).intersection(get_permissions())) <= 0:
raise Exception('Permissions denied')
def __call__(self,fn):
@wraps(fn)
def wrap(*args, **kwargs):
self.check()
return fn(*args, **kwargs)
return wrap
def __enter__(self):
self.check()
def __exit__(self, *args, **kwargs):
pass
def __get__(self, instance, cls): # 类作为装饰器,一定要这样用
type.MethodType(self, instance)
@Requrie({"admin", 'root'})
def reboot():
pass
def kill():
print("i will kill something")
with Requrie("root"):
print('kill')
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。