Flask 验证多用户问题

2019-07-14 13:03:24 +08:00
 mu1er

如题:现有一个 Company 用户与一个 User 用户表, 如果登录 User 的话,能访问到 Company 的某些页面, 现在想加个 permission_require 裝式器,传两个参数,c and u 代码如下:

def permissions_required(user,company):
    def decorator(f):
        @wraps(f)
        def decorated_function(*args,**kwargs):
            if current_user.role.name == 'User':
                if not current_user.can(user):
                    return jsonify(code=-10, msg='没有权限', data={})
            elif current_user.role.name == 'Company':
                if not current_user.can(company):
                    return jsonify(code=-10, msg='没有权限', data={})
            return f(*args,**kwargs)
        return decorated_function
    return decorator

现存问题: 判断第一个为 Flase 后直接 return 了 不 Return 的话,又越权了。 有没有人解决过相关的问题?

2130 次点击
所在节点    Python
3 条回复
qile1
2019-07-14 13:13:42 +08:00
这个用 else 不行?或者 if a=b and c=d:
这样不行?
mu1er
2019-07-14 13:26:49 +08:00
@qile1 不行,if 进去判断 false 直接 return 了,不 return 的话,又越权了
whusnoopy
2019-07-14 22:36:46 +08:00
为啥这个不是白名单机制,现在这个更像是黑名单,但是又不太懂你的设置规则

要更清晰应该是这样吧

```python
if current_user.role.name == 'User' and current_user.can(user):
return f(*args, **kwargs)
if current_user.role.name == 'Company' and current_user.can(company):
return f**args, **kwargs)
return jsonify(code=-10, msg='没有权限', data={})
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/582835

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX