Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

fib-app

Package Overview
Dependencies
Maintainers
1
Versions
115
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

fib-app - npm Package Compare versions

Comparing version 1.3.0 to 1.4.0

1

lib/db.js

@@ -65,2 +65,3 @@ const Pool = require('fib-pool');

m.ACL = opts.ACL;
m.OACL = opts.OACL;
}

@@ -67,0 +68,0 @@

@@ -125,3 +125,9 @@ var util = require('util');

var acl = exports.check_acl(session, act, obj.ACL, extend);
var acl;
var _oalc = cls.OACL;
if (util.isFunction(_oalc))
_oalc = _oalc.call(obj, session);
acl = exports.check_acl(session, act, _oalc, extend);
if (acl === undefined)

@@ -140,3 +146,9 @@ acl = exports.check_acl(session, act, cls.ACL, extend);

var acl = exports.check_acl(session, act, robj.ACL);
var acl;
var _oalc = rcls.OACL;
if (util.isFunction(_oalc))
_oalc = _oalc.call(robj, session);
acl = exports.check_acl(session, act, _oalc);
if (acl === undefined)

@@ -143,0 +155,0 @@ acl = exports.check_obj_acl(session, act, obj, extend);

2

package.json
{
"name": "fib-app",
"version": "1.3.0",
"version": "1.4.0",
"description": "",

@@ -5,0 +5,0 @@ "main": "lib/app",

@@ -100,3 +100,3 @@ # fib-app

其中 `id`, `updatedAt`, `createdAt` 单个字段会自动创建和修改。`createdBy` 则需要自行指定类型。
其中 `id`, `updatedAt`, `createdAt` 单个字段会自动创建和修改。`createdBy` 则需要自行指定类型。

@@ -209,4 +209,3 @@ ## 基础对象访问 API

```sh
curl -X GET \
http://localhost/1.0/person?where=%7B%22name%22%3A%22tom%22%7D
curl -X GET http://localhost/1.0/person?where=%7B%22name%22%3A%22tom%22%7D
```

@@ -216,2 +215,3 @@ `where` 的值为一个 urlencode 后的 JSON 字符串,内容为:`{"name":"tom"}`

除了完全匹配一个给定的值以外,`where` 也支持比较的方式,比如包含。`where` 参数支持如下选项:
| key | operation | sample |

@@ -232,4 +232,5 @@ |--------------|-----------|-----------------------|

| or | 或运算 | {"or":[{"name":"tom"},{"age":24}]} |
#### skip 跳过记录
通过 `skip` 选项,可以跳过指定的记录数,达到翻页的效果。
通过 `skip` 选项,可以跳过指定的记录数,达到翻页的效果。
```sh

@@ -239,3 +240,3 @@ curl -X GET http://localhost/1.0/person?skip=100

#### limit 跳过记录
通过 `limit` 选项,可以限制返回记录数,`limit` 的有效数字为 1-1000,缺省为 100。
通过 `limit` 选项,可以限制返回记录数,`limit` 的有效数字为 1-1000,缺省为 100。
```sh

@@ -245,3 +246,3 @@ curl -X GET http://localhost/1.0/person?limit=100

#### order 指定排序方式
通过 `order` 选项,设定返回结果集的排序方式,字段名前包含 `-` 时为倒序。
通过 `order` 选项,设定返回结果集的排序方式,字段名前包含 `-` 时为倒序。
```sh

@@ -271,5 +272,21 @@ curl -X GET http://localhost/1.0/person?order=-id

```
## 建立扩展对象
通过 orm 定义 hasOne 和 hasMany,可以定义对象之间的关联关系,并在 API 上体现出来,例如:
```JavaScript
module.exports = db => {
var Person = db.models.person;
var Pet = db.define('pet', {
name: String
});
Person.hasMany('pets', Pet);
};
```
## 扩展对象访问 API
| url | method | action |
|----------------------------------|--------|---------------|
下面是扩展对象的 API 定义:
| url | method | action |
|--------------------------------------|--------|---------------|
| /1.0/:className/:id/:extendName | PUT | 设置扩展对象 |

@@ -282,4 +299,47 @@ | /1.0/:className/:id/:extendName | POST | 创建扩展对象 |

### 设置扩展对象
设置扩展对象是将两个独立的对象建立联系。比如 tom 领养了一只叫 cat 的宠物,可以用下面的操作实现:
```sh
curl -X PUT \
-H "Content-Type: application/json" \
-d '{"id": "57fbbdb0a2400007"}' \
http://localhost/1.0/person/57fbbdb0a2400000/pets
```
在调用里需要在 body 内指定 cat 的 id。
### 创建扩展对象
直接创建扩展对象,可以在创建对象的同时,建立对象之间的联系。比如:
```sh
curl -X POST \
-H "Content-Type: application/json" \
-d '{"name": "cat"}' \
http://localhost/1.0/person/57fbbdb0a2400000/pets
```
将创建一只名叫 cat 的宠物,并建立与 tom 的关联关系。
### 读取扩展对象
读取扩展对象与读取基础对象很相似,也同样支持 keys 选项:
```sh
curl -X GET http://localhost/1.0/person/57fbbdb0a2400000/pets/57fbbdb0a2400007
```
### 修改扩展对象
读取扩展对象与读取基础对象很相似:
```sh
curl -X PUT \
-H "Content-Type: application/json" \
-d '{"name": "cat 1"}' \
http://localhost/1.0/person/57fbbdb0a2400000/pets/57fbbdb0a2400007
```
### 删除扩展对象
删除扩展对象不会删除对象本身,只会解除对象之间的关系:
```sh
curl -X DETELE http://localhost/1.0/person/57fbbdb0a2400000/pets/57fbbdb0a2400007
```
### 查询扩展对象列表
查询扩展对象列表与查询基础对象列表很相似,也同样支持 keys 以及条件过滤等选项:
```sh
curl -X GET http://localhost/1.0/person/57fbbdb0a2400000/pets
```
## ACL
可以通过定义 Model 的 ACL 控制数据权限,根据需求可以精确到对象属性级别的控制。比如:
可以通过定义 Model 的 ACL 控制数据权限。比如:
```JavaScript

@@ -294,13 +354,16 @@ const orm = require('fib-orm');

}, {
ACL: {
'*': {
'read': ['title', 'detail']
ACL: function(session) {
return {
"*": {
"*": false
},
'role:user': {
'create': true
"57fbbdb0a2400000": {
"*": true
},
"roles": {
"user": {
"read": true
}
}
":owner": {
'read': true,
"write": true
}
};
}

@@ -310,4 +373,86 @@ });

```
定义了一个 Model,只允许 user 用户组的用户创建,作者本人可以读取所有字段,而其它任何人只允许读取 `title` 和 `detail` 两个字段。
如果定义 Model 时未指定 ACL,则等同于设定了缺省权限:
```JavaScript
{
"*": {
"*": true
}
}
```
### 主体
ACL 主体描述有三种,用户 `id`,用户 `role` 和 `*`,`id` 表示一个具体的用户,`role` 表示具有某个角色的用户,`*` 表示所有用户:
| 主体 | 描述 | 优先级 |
|-------|-------------|-------|
| id | 具体用户的 id | 1 |
| role | 用户组名 | 2 |
| * | 全体 | 3 |
在检查权限时,首先会匹配 `id` 对应的权限,如果未指定,则匹配用户 `role` 对应的权限,如果仍为指定,则查看是否指定了 `*` 的权限,如果 `*` 也未指定,则没有权限。
比如上面的权限配置,指定了 `user` 用户组可以阅读,用户 `57fbbdb0a2400000` 拥有全部权限,而其它用户没有任何权限。
### 权限
ACL 根据 API 行为将权限分类五种:
| 权限 | 描述 | 允许类型 |
|--------|------------|----------------------|
| create | 创建对象 | true / false / array |
| read | 读取对象 | true / false / array |
| write | 修改对象 | true / false / array |
| delete | 删除对象 | true / false |
| find | 查询对象列表 | true / false |
| * | 匹配所有权限 | true / false / array |
权限制定 `true` 为允许访问,为 `false` 为禁止访问,为 `array` 为只允许指定的字段的访问。`delete` 和 `find` 不接受 `array`,如果设置了 `array` 则视同为 `true`。如果指定的权限不存在,则匹配同主体下的 `*` 权限。若都不存在,再一次查询下一优先级的主体。
比如以上例子,如果需要设定 `user` 只允许读取 `title` 和 `detail`,其他人可以读取 `title`,则可以这样设定:
```JavaScript
{
"*": {
"*": false,
"read": ['title']
},
"57fbbdb0a2400000": {
"*": true
},
"roles": {
"user": {
"read": ['title', 'detail']
}
}
}
```
### 对象权限
在 Model 上设定的是整个类的权限,如果需要对具体的对象设定权限,可以通过设置 OACL 来实现:
```JavaScript
module.exports = db => {
db.define('person', {
name: String,
sex: ["male", "female"],
age: Number
}, {
ACL: function(session) {
return {
"*": {
           "*": false
         }
}
},
OACL: function(session) {
var _acl = {};
if(this.id === session.id)
_acl[session.id] = {
"*": true
};
return _acl;
}
});
};
```
在这个例子中,当访问者是对象本人时,将被允许全部操作,否则禁止一切访问。
## Function

@@ -314,0 +459,0 @@ 可以为 Model 定义 api,对于复杂数据操作,可以通过自定义 Function 来完成。

@@ -7,3 +7,3 @@ * 重写用例,用例独立运行, uuid

* relation 创建
* relation createdBy 优化测试
* relation createBy 优化测试

@@ -10,0 +10,0 @@ * create relation 自动创建

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc