2014-08-27 69 views
1

我想了解loopback acl但失敗,如果我可以使用loopback acl控制角色授權,我該怎麼辦?如何使用Loopback ACL修改用戶角色的權限

當我請求

GET http://localhost:1337/api/Employees 401 (Unauthorized) 
{ 
    "error": { 
    "name": "Error", 
    "status": 401, 
    "message": "Authorization Required", 
    "statusCode": 401, 
    "stack": "Error: Authorization Required 
    } 
} 

下面是僱員。該JSON配置

{ 
    "name": "Employee", 
    "base": "User", 
    "properties": { 
    "nickname": { 
     "type": "string" 
    } 
    }, 
    "validations": [], 
    "relations": {}, 
    "acls": [ 
    { 
     "principalType": "ROLE", 
     "principalId": "admin", 
     "permission": "ALLOW", 
     "accessType": "READ" 
    } 
    ], 
    "methods": [] 
} 

下面的代碼是增加僱員

{ 
    "nickname": "", 
    "realm": "", 
    "username": "", 
    "credentials": "object", 
    "challenges": "object", 
    "email": "", 
    "emailVerified": false, 
    "verificationToken": "", 
    "status": "", 
    "created": "", 
    "lastUpdated": "", 
    "id": 0 
} 

我不知道回送的ACL的內部。我如何去改變要實現訪問控制效果?

回答

3

要支持像admin這樣的自定義角色,您需要定義角色並將您的用戶添加到該角色。以下是我用於內部項目的一些代碼:

// Admin users 
var adminUsers = require('../config/users.json').admins; 

app.models.role.findOrCreate({where: {name: 'admin'}}, {name: 'admin'}, 
    function (err, role) { 
    if (err) { 
     return console.error(err); 
    } 
    // role.principals() doesn't work here as the role.id might have a different 
    // type than roleMapping.roleId 
    app.models.roleMapping.find({where: {roleId: role.id.toString()}}, 
     function (err, principals) { 
     if (err) { 
      return console.error(err); 
     } 
     var mapping = {}; 
     principals.forEach(function (p) { 
      if (p.principalType === 'USER') { 
      mapping[p.principalId] = p; 
      } 
     }); 
     app.models.user.find({where: {email: {inq: adminUsers}}}, 
      function (err, users) { 
      if (err) { 
       return console.error(err); 
      } 
      if (users && users.length) { 
       users.forEach(function (user) { 
       if (mapping[user.id.toString()]) { 
        console.log('User %s (%s) found in role %s', user.username, 
        user.email, role.name); 
        return; 
       } 
       role.principals.create({principalType: 'USER', principalId: user.id}, 
        function (err, mapping) { 
        if (err) { 
         return console.error(err); 
        } 
        console.log('User %s (%s) added to role %s', user.username, 
         user.email, role.name); 
        }); 
       }); 
      } 
      }); 
     }; 
    }); 
+0

對不起。所以遲到了回覆你。我錯過了與你最好的會議時間。你在那裏? – dblose 2014-09-01 01:27:35

+0

我需要更新這個腳本嗎?在我的情況下,我已經添加了一個擴展的用戶模型,該模型與我需要訪問這些方法的另一個持久模型的關係 – Elankeeran 2016-03-25 11:29:50