создание администратора суперпользователя в loopback - PullRequest
0 голосов
/ 05 марта 2019

Я все еще копаю глубоко в петлюУ меня есть следующие модели: admin => расширяет встроенную модель User, student => расширяет встроенную модель User и другие модели coz.

Краткое описание:

Я не хочу, чтобы аутентифицированный экземпляр student мог получить доступ к конечной точке Student GET /students.Я не хочу, чтобы Student мог иметь доступ к информации обо всех Student.Итак, я предложил администратора, который должен иметь возможность доступа к конечной точке GET / студентов через реализацию роли.Я хочу, чтобы администратор имел доступ ко всем конечным точкам

Постоянный:

В script.js

module.exports = function(app) {
 const User = app.models.admin;
 const Role = app.models.Role;
 const RoleMapping = app.models.RoleMapping;


 Role.find({ name: 'admin' }, function(err, results) {
    if (err) { 
        throw err;
     }

    if (results.length < 1) {

        // now  Role creation...
   User.create([{name:'Felix Olonde',username:"felix",email: 'felix@gmail.com', password: 'felix123',phone_number:3127287656,dob:1988-03-04,state: 'LA'
    }
  ], 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);
      });
    });
  });

    }
});

}

student.json

"acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$owner",//student to access their own information
      "permission": "ALLOW"
    },
    {
      "accessType": "EXECUTE",
      "principalType": "ROLE",
      "principalId": "admin",
      "permission": "ALLOW",
      "property": "find"
    }
  ],

admin.json

  "acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW"
    }
  ],

Проблема

После входа в систему администратора, который успешно создан в базе данных (я использую Mongo, размещенный в mLab), когда я пытаюсь получить всех студентов с помощью проводникая продолжаю получать 401 .. "Требуется авторизация"

Цель

Я только хочу, чтобы администратор действительно мог полностью контролировать конечные точки API.Т.е. админ должен иметь возможность получить всех учеников и т. Д.

1 Ответ

0 голосов
/ 06 марта 2019

В большинстве случаев хорошим дизайном является наличие одного члена класса (или клиента, или кого угодно), расширяющего встроенную модель пользователя.

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

ACL в student.json правильный и будет работать.

Если вы действительно хотите, чтобы различные модели расширяли встроенныеВ разделе «Пользователь» управление доступом для нескольких пользовательских моделей хорошо объяснено в официальной документации:

https://loopback.io/doc/en/lb3/Authentication-authorization-and-permissions.html#access-control-with-multiple-user-models

...