如何使用 Backand 安全操作参数

Posted

技术标签:

【中文标题】如何使用 Backand 安全操作参数【英文标题】:How to use Backand Security Action Parameters 【发布时间】:2016-06-12 23:33:11 【问题描述】:

问这个问题的简短方法是这样;有谁知道是否可以使用api上提供给注册方法的参数来有条件地设置新创建用户的角色?

现在问一个更详细的问题;

我正在开发一个应用程序,该应用程序有几种不同类型的用户,我想为其分配一个支持和安全角色。我正在尝试根据提供给 Backand 注册方法的参数有条件地设置用户角色,但我无法弄清楚在定义创建时发生的安全操作时如何读取发送到参数对象的值。

在我客户端的 Angular 注册控制器中,isManager 角色是根据请求的路由设置的。

if (isManager) 
  params = 
    manager: isManager,
  ;

return this.Backand.signup(firstName, lastName, email, password, confirmPassword, params)
  .then((result) => ...

该调用有效并创建了一个新的用户对象,我什至可以在根据本说明和后续示例调用 create 方法时将用户对象的角色更改为经理。

注意:出于安全原因,您不能从注册 API 更改角色 - 这只能通过让管理员更改安全和身份验证 -> 注册用户页面上的适当设置来完成,或者通过创建自定义具有管理员权限的服务器端操作。使用以下代码在创建前触发器中创建新的安全操作(这会将角色更新为“公共”):

这里可以找到; http://docs.backand.com/en/latest/apidocs/security/#sign-up

我添加了与示例中类似的逻辑,但我想知道是否可以根据提供的参数添加一些条件逻辑。这是我的尝试;

function backandCallback(userInput, dbRow, parameters, userProfile) 
// write your code here
if (parameters && parameters.manager) 
    userInput.Role = 'Manager';


return ;

但这不起作用,当我尝试添加一个 console.log 时,它将向我显示参数对象的外观,但永远不会生成该日志消息。我当然已经将应用程序置于调试模式,并且当我从 Backand UI 测试安全操作时会生成消息,但是当我通过 api 调用该方法时它不会记录。

有谁知道是否可以使用api上提供给注册方法的参数来有条件地设置新创建用户的角色?

【问题讨论】:

【参考方案1】:

您可以将参数发送到注册操作并在那里实现您的角色分配逻辑。

这是一个示例注册请求正文


 "firstName": "string",
  "lastName": "string",
  "email": "username",
  "password": "123456",
  "confirmPassword": "123456",
  **"parameters": "userType" :"manager"**

现在如文档中所述,在 Create 之前添加一个自定义服务器端 javascript 安全操作,如下所示:

'use strict';
function backandCallback(userInput, dbRow, parameters, userProfile) 
    // write your code here

    userInput.Role = 'Public';
    if(parameters.userType =='manager')
        userInput.Role = 'Manager';
    return ;

为了使上述工作正常进行,我添加了一个新的“经理”角色(安全和身份验证 --> 安全模板 --> 添加角色)

【讨论】:

以上是关于如何使用 Backand 安全操作参数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Backand 创建向管理员发送电子邮件的安全操作?

Backand - 我如何从安全操作中 console.log() 东西?

在 Backand 如何从 node.js 操作上传文件?

如何使用 Backand 和 Ionic 存储图像?

如何确保按需操作的 backand (back&)

如何使用 Backand 和 Angular 2 连接到 Facebook/Twitter/Google?