DEV Community

Tamizh
Tamizh

Posted on

16 14 12 12 13

SaaS-Ready Web Scraping with Tiered Permissions using Permit.io

This is a submission for the Permit.io Authorization Challenge: Permissions Redefined

What I Built

I built Scrapebase - a web scraping service that redefines how we think about permissions in modern SaaS applications. Instead of treating authorization as an afterthought, Scrapebase demonstrates how to build with permissions as a first-class concern from day one.

The project solves several common authorization challenges:

  1. Tiered Access Control: Managing different permission levels for free vs paid users
  2. Resource-Level Restrictions: Controlling access to sensitive domains
  3. Feature-Based Permissions: Gating advanced features behind proper authorization

Key Features

  • Tiered Service Levels: Free, Pro, and Admin tiers with different capabilities
  • API Key Authentication: Simple authentication using API keys
  • Role-Based Access Control: Permissions managed through Permit.io
  • Domain Blacklist System: Resource-level restrictions for sensitive domains
  • Text Processing: Basic and advanced text processing with role-based restrictions

Permission Structure

Feature Free User Pro User Admin
Basic Scraping
Advanced Scraping
Text Cleaning
AI Summarization
View Blacklist
Manage Blacklist
Access Blacklisted Domains

Demo

Try it live at: https://scrapebase-permit.up.railway.app/

Demo
Screenshot: Demo page showing tiered access control in action

Test it yourself:

  • Free User: newuser / 2025DEVChallenge
  • Admin: admin / 2025DEVChallenge

Project Repo

Repository: github.com/0xtamizh/scrapebase-permit-IO

The repository includes:

  • Complete source code with TypeScript
  • Detailed setup instructions
  • API documentation
  • Example environment configuration

My Journey

The Challenge

Traditional approaches to authorization often result in:

  • Permission checks scattered throughout code
  • Security vulnerabilities from inconsistent enforcement
  • Technical debt from hard-coded rules
  • Difficulty in updating permission logic

The Solution

I used Permit.io to create an externalized authorization system that:

  1. Separates business logic from authorization code
  2. Enables policy changes without code deployment
  3. Provides consistent permission enforcement
  4. Allows non-developers to manage permissions

Challenges Faced

The main challenge was implementing attribute-based access control (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

Key Learnings

  1. Technical Benefits

    • Clean separation of concerns
    • Externalized policy management
    • Consistent enforcement
  2. Business Benefits

    • Non-technical policy management
    • Flexible permission updates
    • Better security compliance
  3. Developer Experience

    • Reduced complexity
    • Better maintainability
    • Focus on core features

Using Permit.io for Authorization

Implementation

The core authorization flow:

// 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

Dashboard Configuration

Dashboard: Resource Configuration
Configuring resource types and actions in Permit.io dashboard

Dashboard: Role Setup
Setting up role-based permissions for different user tiers

Dashboard: User Management
Managing users and their role assignments

Future Improvements

  1. Set up local PDP for ABAC support
  2. Implement tenant isolation
  3. Add permission audit logging UI
  4. Create more granular roles
  5. Add user management interface

Scrapebase demonstrates how modern applications can redefine permissions by treating authorization as a first-class concern, enabling better security, maintainability, and user experience.

Tiugo image

Fast, Lean, and Fully Extensible

CKEditor 5 is built for developers who value flexibility and speed. Pick the features that matter, drop the ones that don’t and enjoy a high-performance WYSIWYG that fits into your workflow

Start now

Top comments (1)

Collapse
 
posty_4f923ef95ec434bb074 profile image
posty

cool project

Scale globally with MongoDB Atlas. Try free.

Scale globally with MongoDB Atlas. Try free.

MongoDB Atlas is the global, multi-cloud database for modern apps trusted by developers and enterprises to build, scale, and run cutting-edge applications, with automated scaling, built-in security, and 125+ cloud regions.

Learn More

👋 Kindness is contagious

Discover fresh viewpoints in this insightful post, supported by our vibrant DEV Community. Every developer’s experience matters—add your thoughts and help us grow together.

A simple “thank you” can uplift the author and spark new discussions—leave yours below!

On DEV, knowledge-sharing connects us and drives innovation. Found this useful? A quick note of appreciation makes a real impact.

Okay