大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
题意:
假设已经存在函数 get_permissions可以获取当前用户的权限列表, 设计一个权限管理类,既可以作为装饰器,对一个函数授权,也可以作为上下文管理,对一段代码授权
例如
东乡族网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。创新互联公司自2013年起到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司。
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')