目前,前端开发人员不想使用 Code码,想让我从接口进行拦截然后返回无权限的 操作参数,但是我的接口是 复用的,不能知道是哪一模块的请求,想问下大佬们有什么方案嘛
1:前端传Code 进行校验
2:后端将所有code返回给前端,进行本地校验
这两个方案都被毙了
加网关,改造接口,,在网关处区分模块、验证权限,
为什么是模块?对了,前端加 不同请求头来区分模块 也可以
有些项目是必须前端参与的
好,我看下能不能通过 多几个参数来处理,接收别人的项目 改容易崩,已经模块化了,就是接口复用了,造成我接口权限控制的粒度不足,目前前端想全权交给后端来,不在前端写死东西
@IT小苍:
技术方案无解后,可以想想这是否是一个 政治问题。
@快乐的凡人721: 大佬 一言惊醒梦中人,我尝试下,不行只能考虑这个问题了
@IT小苍:
感谢感谢!其实可以分一些给其它 热心园友 的哈
Token 呢
Token有,主要是 接口复用,所以接口权限校验的 身份肯定是总和的,就造成粒度不足了
@IT小苍:
我说说代码层面的,不知道符不符合你的场景
一般 token 不仅仅可以做身份校验, 里面可以包含一些关键参数(如果不介意,放header也行);
调 API 时, 在中间件做认证(API访问权限控制), 并将 token 参数解析,获取到 角色等其他信息
路由映射后,在视图函数做进一步的权限控制
这样可以做 2 层以上的访问控制,具体控制哪方面你可以自己调整
第一层
def on_route(self, state):
headers = state.request.headers
roles = headers.get('X-Roles', '').split(',')
is_admin = policy.check_is_admin(roles)
creds = {
'user_id': headers.get('X-User-Id', ''),
'tenant': headers.get('X-Tenant-Id', ''),
'auth_token': headers.get('X-Auth-Token', ''),
'is_admin': is_admin,
'roles': roles,
"user_name": headers.get('X-User-Name', ''),
"project_name": headers.get('X-Project-Name', ''),
"domain": headers.get('X-User-Domain-Id', ''),
"domain_name": headers.get('X-User-Domain-Name', ''),
}
第二层
policy.authorize(pecan.request.context, 'collector:get_mapping', {})
policy.DocumentedRuleDefault(
name='collector:get_mapping',
check_str=base.ROLE_ADMIN,
description='Return a service to collector mapping.',
operations=[{'path': '/v1/collector/mappings/{service_id}',
'method': 'GET'}]),
@韆: 感谢,辛苦了,但是和我目前的场景不太适应
我们是前端不同权限访问的页面不一样,虽然也有网关
是通过请求接口获取权限,还是一登录把所有权限码发送给你们前端呢
@IT小苍: 前端登陆后获取权限,然后路由限制,不同的权限可以访问不同的页面和菜单