首页 新闻 会员 周边 捐助

关于前后端的权限控制方案

0
悬赏园豆:50 [已解决问题] 解决于 2021-10-15 17:44

目前,前端开发人员不想使用 Code码,想让我从接口进行拦截然后返回无权限的 操作参数,但是我的接口是 复用的,不能知道是哪一模块的请求,想问下大佬们有什么方案嘛

1:前端传Code 进行校验
2:后端将所有code返回给前端,进行本地校验

这两个方案都被毙了

RolyPoly_Toy的主页 RolyPoly_Toy | 菜鸟二级 | 园豆:219
提问于:2021-10-15 15:16
< >
分享
最佳答案
0

加网关,改造接口,,在网关处区分模块、验证权限,
为什么是模块?对了,前端加 不同请求头来区分模块 也可以
有些项目是必须前端参与的

收获园豆:50
快乐的欧阳天美1114 | 老鸟四级 |园豆:4004 | 2021-10-15 15:32

好,我看下能不能通过 多几个参数来处理,接收别人的项目 改容易崩,已经模块化了,就是接口复用了,造成我接口权限控制的粒度不足,目前前端想全权交给后端来,不在前端写死东西

RolyPoly_Toy | 园豆:219 (菜鸟二级) | 2021-10-15 15:57

@IT小苍:
技术方案无解后,可以想想这是否是一个 政治问题。

快乐的欧阳天美1114 | 园豆:4004 (老鸟四级) | 2021-10-15 16:16

@快乐的凡人721: 大佬 一言惊醒梦中人,我尝试下,不行只能考虑这个问题了

RolyPoly_Toy | 园豆:219 (菜鸟二级) | 2021-10-15 16:35

@IT小苍:
感谢感谢!其实可以分一些给其它 热心园友 的哈

快乐的欧阳天美1114 | 园豆:4004 (老鸟四级) | 2021-10-15 18:52
其他回答(2)
0

Token 呢

〆灬丶 | 园豆:2314 (老鸟四级) | 2021-10-15 15:32

Token有,主要是 接口复用,所以接口权限校验的 身份肯定是总和的,就造成粒度不足了

支持(0) 反对(0) RolyPoly_Toy | 园豆:219 (菜鸟二级) | 2021-10-15 15:55

@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'}]),

支持(0) 反对(0) 〆灬丶 | 园豆:2314 (老鸟四级) | 2021-10-15 16:41

@韆: 感谢,辛苦了,但是和我目前的场景不太适应

支持(0) 反对(0) RolyPoly_Toy | 园豆:219 (菜鸟二级) | 2021-10-15 17:43
0

我们是前端不同权限访问的页面不一样,虽然也有网关

人间春风意 | 园豆:2780 (老鸟四级) | 2021-10-15 16:23

是通过请求接口获取权限,还是一登录把所有权限码发送给你们前端呢

支持(0) 反对(0) RolyPoly_Toy | 园豆:219 (菜鸟二级) | 2021-10-15 16:34

@IT小苍: 前端登陆后获取权限,然后路由限制,不同的权限可以访问不同的页面和菜单

支持(0) 反对(0) 人间春风意 | 园豆:2780 (老鸟四级) | 2021-10-18 11:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册