【问题标题】:Loopback - require 2 custom roles to access methodLoopback - 需要 2 个自定义角色才能访问方法
【发布时间】:2018-02-15 18:58:38
【问题描述】:

我有一种多租户应用程序。 我有很多组,用户属于一个组。集团有许多不同的模型,例如新闻、文件等 用户只能访问其组的元素。 它类似于 Loopback 文档中的“teamMember”示例,在我的情况下,我有“groupMember”,所以当用户尝试访问时,我会检查 User.groupId === Model.groupId

我遇到的问题是,我需要为这些组设置角色。 所以,例如基本,特权,管理员。 Basic 可以访问一些方法,特权高于基本但不是所有方法,管理员可以访问所有方法,但仅适用于他的组的元素。 所以,据我了解,我必须结合 - groupMember 和例如admin,但我不知道该怎么做。

有人可以帮忙吗?我认为这是很常见的事情。

【问题讨论】:

  • 您可以在loopback-component-access-groups 包中获得一些灵感。
  • 老实说,它是这个问题的完整解决方案。谢谢你。我可能只是为了改进访问级别解决方案而分叉它。

标签: acl loopbackjs strongloop


【解决方案1】:
module.exports = function (app) {
  //get User model from the express app
  var loopback = require('loopback');
  var User = app.models.User;
  let { Role, RoleMapping } = require('../../server/server').models;

  //Role Mapping
  User.observe('after save', function setRoleMapping(ctx, next) {
    console.log("Current User : "+currentUser);
    if (ctx.instance) {
      if(ctx.isNewInstance) {
        let rol_name=[ctx.instance.type];
        // look up role based on type
        Role.find({where: {name:{inq:rol_name} }}, function(err, role) {
          console.log('Role: '+role)
          if (err) {return console.log(err);}

          RoleMapping.create({
            principalType: rol_name,
            principalId: ctx.instance.id,
            roleId: role[0].id
          }, function(err, roleMapping) {

            if (err) {return console.log(err);}
            console.log("Created Role :"+JSON. parse(JSON. stringify(role)));
            console.log('User assigned RoleID ' + role[0].id + ' (' + ctx.instance.type + ')');

          });

        });

      }
    }
    next();
  });

}

发布 json 数据格式

{
"email":"test54@gmail.coms",
"password":"123456",
"type":"storeAdmin"
}

我的角色表:

【讨论】:

    猜你喜欢
    • 2019-06-10
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2023-04-08
    • 2016-04-29
    • 2012-09-09
    相关资源
    最近更新 更多