幼儿园(Kindergarten):为你的业务逻辑保驾护航

幼儿园(Kindergarten):为你的业务逻辑保驾护航

kindergarten:house_with_garden: Kindergarten is a JavaScript library which helps programmers to achieve modular security using sandbox pattern项目地址:https://gitcode.com/gh_mirrors/ki/kindergarten

项目介绍

幼儿园(Kindergarten) 是一个基于沙箱模式的开源项目,旨在帮助开发者将业务逻辑模块化,并为这些模块添加一层安全防护。无论你使用的是VueJS、React、Angular、Ember还是Backbone等前端框架,Kindergarten都能完美适配,为你的应用提供强大的安全保障。

项目技术分析

Kindergarten的核心思想是将应用的业务逻辑划分为多个Perimeter(周边),每个Perimeter代表应用中的一个区域(如组件、页面、按钮等)。每个Perimeter定义了可以暴露的方法以及必须遵循的规则。这些Perimeter被加载到一个**Sandbox(沙箱)中,并通过一个Governess(女教师)**来确保所有规则得到遵守,防止任何未经授权的操作。

关键组件

  • Perimeter(周边):定义业务逻辑模块,包含暴露的方法和规则。
  • Sandbox(沙箱):加载和管理Perimeter,通过Governess确保规则的执行。
  • Governess(女教师):负责监控和执行规则,防止未经授权的操作。
  • Child(孩子):代表当前应用的用户。

项目及技术应用场景

Kindergarten适用于需要高度安全性和模块化管理的应用场景,特别是在以下情况下:

  • 多用户权限管理:适用于需要根据用户角色和权限来控制访问的应用,如企业管理系统、社交平台等。
  • 复杂业务逻辑:适用于业务逻辑复杂、需要模块化管理的应用,如电商系统、金融平台等。
  • 前端框架集成:适用于需要与多种前端框架集成的应用,如单页应用(SPA)、移动应用等。

项目特点

  1. 模块化设计:通过Perimeter将业务逻辑模块化,便于管理和维护。
  2. 安全防护:通过Governess确保所有规则得到执行,防止未经授权的操作。
  3. 灵活集成:支持与多种前端框架集成,如VueJS、React、Angular等。
  4. 丰富的规则定义:支持多种规则定义方式,如正则表达式、函数等。
  5. 易于扩展:支持自定义Governess,满足不同应用的安全需求。

示例代码

以下是一个简单的示例,展示了如何使用Kindergarten来管理用户的操作权限:

import {
  createPerimeter,
  createSandbox
} from 'kindergarten';
import { guard } from 'kindergarten/lib/decorators';

import Child from './Child';
import Television from './Television';
import CableTv from './CableTv';

// 定义Perimeter
const homePerimeter = createPerimeter({
  purpose: 'home',

  can: {
    watch: [Television],

    eat(candy) {
      // 只允许吃5颗糖果
      return this.child.eatenCandies < 5;
    }
  },

  cannot: {
    watch: [CableTv],
    visitWebPage: /drugs|sex|rock-and-roll|guns/
  },

  expose: [
    'watchTv',
    'browseInternet',
    'eat'
  ],

  watchTv(tv) {
    this.guard('watch', tv);

    console.log(`${this.childName()} is watching ${tv.type}`);
  },

  @guard
  eat(candy) {
    console.log(`${this.childName()} is eating a candy #${++this.child.eatenCandies}`);
  },

  @guard('visitWebPage')
  browseInternet(site) {
    console.log(`${this.childName()} is browsing on following site: ${site}`);
  },

  childName() {
    return `${this.child.name}`;
  }
});

// 定义Child
const child = new Child("John Smith Jr.");

// 定义Sandbox
const sandbox = createSandbox(child);
sandbox.loadModule(homePerimeter);

// 正常操作
sandbox.home.watchTv(new Television());

// 抛出AccessDenied错误
sandbox.home.watchTv(new CableTv());
sandbox.home.watchTv(CableTv);

// 一段时间后失败
for (let i = 0; i <= 6; i++) {
  sandbox.home.eat('Tasty Candy');
});

sandbox.home.browseInternet('http://google.com'); // 正常

// 抛出AccessDenied错误
sandbox.home.browseInternet('http://buy-drugs-and-guns-online.com');

安装与使用

安装

通过npm安装Kindergarten:

yarn add kindergarten

使用

Kindergarten提供了多种使用方式,包括继承Sandbox类、使用装饰器等。以下是一个简单的使用示例:

import { Sandbox } from 'kindergarten';

class MyClass extends Sandbox {
  constructor(currentUser, perimeters) {
    this.child = currentUser;
    this.loadPerimeter(...perimeters);
  }

  @guard
  someProtectedMethod() {
    // 这个方法将被保护
  }
}

结语

Kindergarten通过模块化和安全防护机制,为你的应用提供了强大的业务逻辑管理和安全保障。无论你是前端开发者还是全栈工程师,Kindergarten都能帮助你更好地管理和保护你的应用。快来尝试一下吧!

kindergarten:house_with_garden: Kindergarten is a JavaScript library which helps programmers to achieve modular security using sandbox pattern项目地址:https://gitcode.com/gh_mirrors/ki/kindergarten

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

强海寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值