Django/Django Guardian中检测用户拥有任一权限的Pythonic实现方式
Django/Django Guardian 检测用户是否拥有任一权限的Pythonic写法
在Django和Django Guardian框架中,检测权限的基础用法已经很便捷:
- 检测单个权限:
user.has_perm('app.can_eat_pizzas') - 检测用户是否拥有全部指定权限:
user.has_perms(('app.add_student', 'app.can_deliver_pizzas'))
如果要检测用户是否拥有任一指定权限,最符合Python风格的写法是利用any()函数配合生成器表达式,替代繁琐的or串联写法:
any(user.has_perm(perm) for perm in ('app.add_student', 'app.can_deliver_pizzas'))
这种写法不仅简洁,当需要检测的权限数量较多时,扩展性比逐个写or要好得多。如果需要在多个地方复用这个逻辑,还可以封装成一个简单的工具函数:
def has_any_perm(user, perms): return any(user.has_perm(perm) for perm in perms) # 调用示例 has_any_perm(user, ('app.add_student', 'app.can_deliver_pizzas'))
内容的提问来源于stack exchange,提问作者alias51
相关产品推荐
相关产品推荐

