Роль администратора Loopback 3 не отображается - PullRequest
0 голосов
/ 16 июня 2020

Я мог бы помочь. Я использую loopback 3 с расширенной моделью User и потерял доступ к роли администратора.

user. json

{
  "name": "user",
  "plural": "users",
  "base": "User",
  "idInjection": false,
  "options": {
    "validateUpsert": true
  },
  "properties": {},
  "validations": [],
  "relations": {
    "roles": {
      "type": "hasMany",
      "model": "Role",
      "foreignKey": "principalId",
      "through": "RoleMapping"
    },
    "contents": {
      "type": "hasMany",
      "model": "content",
      "foreignKey": "userId",
      "options": {
        "nestRemoting": true
      }
    },
    "accessTokens": {
      "type": "hasMany",
      "model": "AccessToken",
      "foreignKey": "userId",
      "options": {
        "disableInclude": true
      }
    }
   },
   "acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "admin",
      "permission": "ALLOW"
    }
  ],
  "methods": {} 
}

model-config. json

{
  "_meta": {
    "sources": [
      "loopback/common/models",
      "loopback/server/models",
      "../common/models",
      "./models"
    ],
    "mixins": [
      "loopback/common/mixins",
      "loopback/server/mixins",
      "../common/mixins",
      "./mixins"
    ]
  },
  "User": {
    "dataSource": "db",
    "public": false,
    "options": {
      "emailVerificationRequired": true,
      "strictObjectIDCoercion": true
    }
  },
  "AccessToken": {
    "dataSource": "db",
    "public": false,
    "relations": {
      "user": {
        "type": "belongsTo",
        "model": "user",
        "foreignKey": "userId"
      }
    }
  },
  "ACL": {
    "dataSource": "db",
    "public": false
  },
  "RoleMapping": {
    "dataSource": "db",
    "public": false,
    "options": {
      "strictObjectIDCoercion": true
    }
  },
  "Role": {
    "dataSource": "db",
    "public": false
  },
  "attachment": {
    "dataSource": "storage",
    "public": true
  },
  "audio": {
    "dataSource": "millicentaudio",
    "public": true
  },
  "running": {
    "dataSource": "mem",
    "public": true
  },
  "content": {
    "dataSource": "db",
    "public": true
  },
  "vocalplaylist": {
    "dataSource": "db",
    "public": true
  },
  "backgroundplaylist": {
    "dataSource": "db",
    "public": true
  },
  "soundscapeplaylist": {
    "dataSource": "db",
    "public": true
  },
  "Email": {
    "dataSource": "email"
  },
  "user": {
    "dataSource": "db",
    "public": true
  }
}

сценарий загрузки

module.exports = function (app) {
  var User = app.models.User
  var Role = app.models.Role
  var RoleMapping = app.models.RoleMapping
  var Team = app.models.Team

  User.create([
      {username: 'name', email: 'email@gmail.com', password: 'password'}
  ], function(err, users) {
      if (err) {
          console.log(err)
      }
      //...
      // Create projects, assign project owners and project team members
      //...
      // Create the admin role
      Role.create({
        name: 'admin'
      }, function(err, role) {
        if (err) {
        console.log(role)
        }  
        // Make user an admin
        role.principals.create({
          principalType: RoleMapping.USER,
          principalId: users[0].id
        }, function(err, principal) {
          if (err) {
          console.log(principal)
          }
        })
      })
    })
}

отладка для показа ролей

  loopback:security:role isInRole(): $everyone +0ms
  loopback:security:role Custom resolver found for role $everyone +1ms
  loopback:security:role isInRole(): $everyone +0ms
  loopback:security:role Custom resolver found for role $everyone +0ms
  loopback:security:role isInRole(): admin +0ms
  loopback:security:role Role found: {"id":"5c98fc80fb2bbc1f9a7f5075","name":"admin","created":"2019-03-25T16:06:24.486Z","modified":"2019-03-25T16:06:24.486Z"} +1ms
  loopback:security:role Role mapping found: null +2ms
  loopback:security:role isInRole() returns: null +0ms

Показано, что, хотя пользователь и является администратором сопоставления ролей, не может его найти.

Я думаю это может иметь какое-то отношение к отношениям или принципу типа, используемому при создании сопоставления ролей. Я пробовал изменить RoleMapping.USER на 'user' (название модели), используя модель пользователя вместо модели пользователя в скрипте загрузки, обновляя deps, но, похоже, не могу заставить его снова работать.

.... ....

edit .... Я установил еще одну установку, и если для источника данных задано значение mem, все в порядке, если он настроен на использование mongodb admin, проверка не выполняется.

edit .... Установка сопоставления ролей, роли и пользователя (расширенная модель пользователя) для mem в конфигурации модели. json «исправляет», но ищется лучшее решение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...