LoopBack和管理员用户

时间:2016-09-04 09:08:08

标签: loopbackjs loopback

我正在处理找到here的LoopBack文档。我没有按照文档来构建所涵盖的应用程序,而是将这些概念应用于我自己的应用程序。

我有以下型号:

  1. SuperUser =>扩展了内置的User模型
  2. Profile =>扩展了内置的User模型
  3. Account =>一个LoopBack PersistedModel
  4. Transaction =>一个
  5. 简介:

    我不希望经过身份验证的实例Profile能够访问端点Profile GET /Profiles。我不希望Profile能够访问有关所有Profile的信息。所以,我提出了SuperUser,它应该能够通过实现Profile GET /Profiles来访问端点Role

    常设:

    这是我到目前为止所做的:

    创建SuperUser的功能和Role name admin的功能。然后将该角色分配给创建的SuperUser

    function createSuperUser(){
      SuperUser.create([
        {email: "reubs@reubs.com", username:"reubs", password: 'password'}
      ], function(err, users) {
        if (err) throw err;
    
        console.log('Created user:', users);
    
        //create the admin role
        Role.create({
          name: 'admin'
        }, function(err, role) {
          if (err) throw err;
    
          console.log('Created role:', role);
    
          role.principals.create({
            principalType: RoleMapping.USER,
            principalId: users[0].id
          }, function(err, principal) {
            if (err) throw err;
    
            console.log('Created principal:', principal);
          });
        });
      });
    }
    

    我的profile.json $owner中使用动态角色acls来尝试确保Profile只能获得它拥有的内容。还不是admin中包含acls规则。

    {
      "name": "Profile",
      "base": "User",
      "idInjection": true,
      "options": {
        "validateUpsert": true
      },
      "properties": {},
      "validations": [],
      "relations": {
        "accounts": {
          "type": "hasMany",
          "model": "Account",
          "foreignKey": "profileId"
        }
      },
      "acls": [
        {
          "accessType": "*",
          "principalType": "ROLE",
          "principalId": "$everyone",
          "permission": "DENY"
        },
        {
          "accessType": "*",
          "principalType": "ROLE",
          "principalId": "$owner",
          "permission": "ALLOW"
        },
        {
          "accessType": "EXECUTE",
          "principalType": "ROLE",
          "principalId": "admin",
          "permission": "ALLOW",
          "property": "find"
        }
      ],
      "methods": {}
    }
    

    问题:

    此设置允许经过身份验证的Profile访问端点Profile GET /Profiles

    目标:

    我只希望SuperUser能够真正完全控制Projects API端点。即SuperUser应该能够获得所有Profiles等等。

    提前致谢, Reubs

1 个答案:

答案 0 :(得分:0)

在您的Profile.js文件中,您应该实现一些方法,该方法接受尝试发出请求的当前/源配置文件ID(您可以从当前上下文获取)。比较请求的配置文件ID和当前配置文件ID。如果匹配,则发回数据。

请务必在json中添加验证方法的名称。例如:"property": "[find, yourProfileValidationMethod]"。此外,您可以在json中添加"model": "Profile"属性,以使此规则特定于此模型。

我希望这可以回答你的大部分问题。如果您需要更多帮助,请告诉我。