loopback搭建REST API学习笔记(三)

这章准备将用户权限做一下,想到哪做到哪,愉快的开始了~

一、创建登录用户表Customer

进入loopback应用根目录,添加一个基于User模型的扩展模型Customer,用于用户登录和获取token用,输入命令lb model(loopback创建模型是真心方便)

lb model

请输入模型名称: Customer

选择要向其附加 Customer 的数据源: MongoDB (mongodb)

选择模型的基类 User

通过 REST API 公开 Customer? Yes

定制复数形式(用于构建 REST URL):

公共模型或仅服务器? 公共

创建好Customer模型后,再给Customer添加几个用户的基本属性

firstname - string,非必填,缺省空

lastname - string,非必填,缺省空

image - string,非必填,缺省空

因为基于User基类,所以用户名和密码啥的就不用加了,完成后生成customer.json数据模型,如果在生成时输入或者写错了,可以直接修改模型文件

common/models/customer.json

二、添加用户权限

进入终端输入lb acl开始添加用户权限

lb acl

我的思路比较粗暴,先关闭所有权限,然后按需逐个打开

1、关闭所有访问权限

选择要应用 ACL 条目的模型: (所有现有模型)

选择 ACL 作用域: 所有方法和属性

选择访问类型: 全部(匹配所有类型)

选择角色 所有用户

选择要应用的许可权 明确拒绝访问

设置完后可以到数据common/models/下打开json文件查看数据模型,所有的数据模型文件都多了这块东西,这玩意儿就是刚刚加的权限了

"acls": [
  {
    "accessType": "*",
    "principalType": "ROLE",
    "principalId": "$everyone",
    "permission": "DENY"
  }
],

2、打开所有用户读取权限

选择要应用 ACL 条目的模型: (所有现有模型)

选择 ACL 作用域: 所有方法和属性

选择访问类型: 读取

选择角色 所有用户

选择要应用的许可权 明确授权访问

3、仅认证用户可以创建checklist(用户登录成功后即为认证用户)

选择要应用 ACL 条目的模型: checklist

选择 ACL 作用域: 单个方法

输入方法名称 create

选择角色 任何已认证的用户

选择要应用的许可权 明确授权访问

4、仅认证用户可以创建item

前面忘记创建数据模型了,这里补充上

lb model


======= 添加模型 =======

请输入模型名称: item
选择要向其附加 item 的数据源: MongoDB (mongodb)
选择模型的基类 PersistedModel
通过 REST API 公开 item? Yes
定制复数形式(用于构建 REST URL): 
公共模型或仅服务器? 公共


======= 添加3个属性 =======
属性名称: name
属性类型: string
是否为必需? Yes
缺省值[对于无,保留为空白]: untitled

属性名称: type
属性类型: string
是否为必需? Yes
缺省值[对于无,保留为空白]: item

属性名称: checked
属性类型: boolean
是否为必需? Yes
缺省值[对于无,保留为空白]: false


选择要应用 ACL 条目的模型: item

选择 ACL 作用域: 单个方法

输入方法名称 create

选择角色 任何已认证的用户

选择要应用的许可权 明确授权访问

这里要注意一下,因为这个item模型是后期建的,而前面两步的授权已经做过了,因此新建出来的模型里不会包含前面的授权,最简单的方法是,打开common/models/item.json文件,从其他模型文件复制前两步的权限配置,到acls里面即可,我item.json修改后是这样的

"acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "READ",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "ALLOW"
    },
    {
      "accessType": "EXECUTE",
      "principalType": "ROLE",
      "principalId": "$authenticated",
      "permission": "ALLOW",
      "property": "create"
    }
  ],

5、创建用户

任何人都可以注册为用户,因此要将创建用户的权限开放给所有人,打开终端lb acl执行

选择要应用 ACL 条目的模型: Customer

选择 ACL 作用域: 单个方法

输入方法名称 create

选择角色 所有用户

选择要应用的许可权 明确授权访问

三、用户注册和用户登录

基本权限设置好了,我们来测试一下是否设置成功

1、用户注册

打开浏览器,输入http://localhost:3000/explorer,展开Customers,找到POST的方法,输入注册用户的基本信息,点击Try it out!按钮进行提交

{
  "firstname": "Samsun",
  "lastname": "Xu",
  "image": "",
  "username": "sam",
  "password": "password",
  "email": "sam@local.host"
}

Customer数据模型有3个属性,其他属性是基于User数据模型,提交成功后,Response Body会反馈如下信息,生成了id就说明用户注册成功了

{
  "firstname": "Samsun",
  "lastname": "Xu",
  "image": "",
  "username": "sam",
  "email": "sam@local.host",
  "id": "6253c3496b6f30b909da1bff"
}

2、用户登录

找到POST /Customers/login的方法,输入刚刚注册时用户名和密码

{
  "username":"sam",
  "password":"password"
}

登录成功后,反馈如下信息,这里的id其实就是用户的访问令牌accessToken,如果要测试需要认证用户权限的接口,请复制好token

{
  "id": "nnTP5dliAWUSO4wDK6wR1LHC29yifdSek3ec67EShuG1fE8O1BKwUYrSBnEmNPBv",
  "ttl": 1209600,
  "created": "2022-04-11T06:10:13.083Z",
  "userId": "6253c3496b6f30b909da1bff"
}

四、权限测试

已经注册了一个用户了,现在测试一下我们刚刚的权限是否设置成功。

试着创建一个checklist,找到POST /checklist的方法,输入清单的名称

{
  "title": "旅行清单"
}

提交后,会返回401错误

{
  "error": {
    "statusCode": 401,
    "name": "Error",
    "message": "需要授权",
    "code": "AUTHORIZATION_REQUIRED",
    "stack": "Error: 需要授权\n    at ....."
  }
}

拿着前面登录接口获得的token,在LoopBack API Explorer的页面顶部设置token

 

 设置好token后,回到POST /checklist的方法,重新提交一下,id返回了说明就创建成功了

{
  "title": "旅行清单",
  "id": "6253ce03970c51bc2ca4bcca"
}

到这里,基本权限也测试完成了,到目前为止还没写过什么正经代码,真的非常的方便

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值