阅读 114

cube.js 基于queryRewrite 进行安全控制

基于queryRewrite 我们可以做强大的安全控制,比如基于角色的访问控制以及基于列的访问控制

基于角色的访问控制

module.exports = {
  queryRewrite: (query, { securityContext }) => {
    if (!securityContext.role) {
      throw new Error(‘No role found in Security Context!‘);
    }
 
    if (securityContext.role == ‘manager‘) {
      query.filters.push({
        member: ‘Orders.status‘,
        operator: ‘equals‘,
        values: [‘shipped‘, ‘completed‘],
      });
    }
 
    if (securityContext.role == ‘operator‘) {
      query.filters.push({
        member: ‘Orders.status‘,
        operator: ‘equals‘,
        values: [‘processing‘],
      });
    }
 
    return query;
  },
};

基于列的访问控制

module.exports = {
  queryRewrite: (query, { securityContext }) => {
    const cubeNames = [
      ...Array.from(query.measures, (e) => e.split(‘.‘)[0]),
      ...Array.from(query.dimensions, (e) => e.split(‘.‘)[0]),
    ];
 
    if (cubeNames.includes(‘Products‘)) {
      if (!securityContext.email) {
        throw new Error(‘No email found in Security Context!‘);
      }
 
      query.filters.push({
        member: `Suppliers.email`,
        operator: ‘equals‘,
        values: [securityContext.email],
      });
    }
 
    return query;
  },
};

说明

以上内容是基于官方文档的,是一个不错的资料

参考资料


原文:https://www.cnblogs.com/rongfengliang/p/15182702.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐