您的位置:首页 > 编程语言

假设已经存在函数 get_permissions可以获取当前用户的权限列表, 设计一个权限管理类,既可以作为装饰器,对一个函数授权,也可以作为上下文管理,对一段代码授权

2020-03-23 18:48 501 查看

例如

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')
  • 点赞
  • 收藏
  • 分享
  • 文章举报
lz270978971 发布了13 篇原创文章 · 获赞 1 · 访问量 290 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐