发布于 2026-01-06 8 阅读
0

使用 Permit.io 实现具有分层权限的 SaaS 就绪型网页抓取

使用 Permit.io 实现具有分层权限的 SaaS 就绪型网页抓取

这是Permit.io 授权挑战赛:权限重新定义 的参赛作品。

我建造的

我创建了Scrapebase——一个网络爬虫服务,它重新定义了我们对现代 SaaS 应用中权限的思考方式。Scrapebase 并没有将授权视为事后考虑,而是从一开始就将权限作为首要考虑因素进行构建。

该项目解决了几个常见的授权难题:

  1. 分层访问控制:管理免费用户和付费用户的不同权限级别
  2. 资源级限制:控制对敏感域的访问
  3. 基于功能的权限:将高级功能置于适当授权之后

主要特点

  • 分级服务级别:免费版、专业版和管理员版,功能各不相同。
  • API密钥认证:使用API​​密钥进行简单认证
  • 基于角色的访问控制:通过 Permit.io 管理权限
  • 域名黑名单系统:对敏感域名进行资源级限制
  • 文本处理:基于角色限制的基本和高级文本处理

权限结构

特征 免费用户 专业用户 行政
基础刮削
高级抓取
文本清理
人工智能摘要
查看黑名单
管理黑名单
访问黑名单域名

演示

立即体验:https://scrapebase-permit.up.railway.app/

演示
屏幕截图:演示页面展示了分层访问控制的实际应用。

自己测试一下:

  • 免费用户:newuser/2025DEVChallenge
  • 行政:admin/2025DEVChallenge

项目仓库

仓库:github.com/0xtamizh/scrapebase-permit-IO

该存储库包含:

  • 包含 TypeScript 的完整源代码
  • 详细设置说明
  • API 文档
  • 示例环境配置

我的旅程

挑战

传统的授权方式通常会导致:

  • 代码中散布着权限检查。
  • 执法不一致造成的安全漏洞
  • 硬编码规则造成的技术债务
  • 更新权限逻辑存在困难

解决方案

我使用 Permit.io 创建了一个外部授权系统,该系统:

  1. 将业务逻辑与授权代码分离
  2. 无需部署代码即可实现策略变更
  3. 提供一致的权限执行
  4. 允许非开发人员管理权限

面临的挑战

主要挑战在于实现基于属性的访问控制(ABAC):

// Initially tried ABAC (didn't work with cloud PDP)
const resource = {
  type: 'website',
  attributes: {
    is_blacklisted: isBlacklistedDomain
  }
};

// Had to simplify to RBAC
const permissionCheck = await permit.check(user.key, action, 'website');
Enter fullscreen mode Exit fullscreen mode

主要收获

  1. 技术优势

    • 明确区分关注点
    • 外部政策管理
    • 持续执法
  2. 商业利益

    • 非技术性政策管理
    • 灵活的权限更新
    • 更好的安全合规性
  3. 开发者体验

    • 降低复杂性
    • 更好的可维护性
    • 专注于核心功能

使用 Permit.io 进行授权

执行

核心授权流程:

// permitAuth middleware
const permitAuth = async (req, res, next) => {
  const apiKey = req.headers['x-api-key'];

  // Map API key to user role
  const user = mapApiKeyToUser(apiKey);

  // Sync with Permit.io
  await permit.api.syncUser({
    key: user.key,
    email: user.email,
    attributes: { tier: user.tier }
  });

  // Check permission
  const allowed = await permit.check(user.key, req.action, 'website');
  if (!allowed) {
    return res.status(403).json({
      error: 'Access denied',
      details: `User ${user.key} cannot perform ${req.action}`
    });
  }

  next();
};
Enter fullscreen mode Exit fullscreen mode

仪表盘配置

仪表盘:资源配置
在 Permit.io 控制面板中配置资源类型和操作

控制面板:角色设置
为不同用户层级设置基于角色的权限

控制面板:用户管理
用户及其角色分配的管理

未来改进

  1. 设置本地 PDP 以支持 ABAC
  2. 实施租户隔离
  3. 添加权限审计日志记录 UI
  4. 创建更细粒度的角色
  5. 添加用户管理界面

Scrapebase 展示了现代应用程序如何通过将授权视为首要考虑因素来重新定义权限,从而实现更好的安全性、可维护性和用户体验。

文章来源:https://dev.to/tamizhme/saas-ready-web-scraping-with-tiered-permissions-using-permitio-143d