get_permissions授权获取当前用户的权限列表-创新互联

题意:
假设已经存在函数 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许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:get_permissions授权获取当前用户的权限列表-创新互联
文章路径:http://hbruida.cn/article/dgpscp.html