angularjs - 使用 Loopback-component-passport 将环回中的用户角色设置为内置模型

标签 angularjs node.js loopbackjs strongloop

我正在尝试使用 npm loopback-component-passport 在环回中创建用户,并根据条件创建用户 Angular 色,

  1. 如果用户拥有属性 isAdmin:true,他应该具有 admin Angular 色
  2. 如果用户拥有属性 isAdmin:false,他应该具有 user Angular 色

这是我的代码:

if (form.$valid) {
        AuthService.register({
          name: $scope.user.name,
          email: $scope.user.email,
          password: $scope.user.password,
          isAdmin: $scope.user.isAdmin
        })
          .then(function() {
            // Account created, redirect to home
            $state.go('home');
          })
          .catch(function(err) {
            err = err.data;
            $scope.errors = {};

            // Update validity of form fields that match the mongoose errors
            angular.forEach(err.errors, function(error, field) {
              form[field].$setValidity('mongoose', false);
              $scope.errors[field] = error.message;
            });
        });
}

工厂:

angular
  .module('app')
  .factory('AuthService', ['User', '$q', '$rootScope', function(User, $q, $rootScope) {
    function login(email, password) {
      return User
        .login({email: email, password: password})
        .$promise
        .then(function(response) {
          $rootScope.currentUser = {
            id: response.user.id,
            tokenId: response.id,
            email: email
          };
        });
    }

    function logout() {
      return User
        .logout()
        .$promise
        .then(function() {
          $rootScope.currentUser = null;
        });
    }

    function register(user) {
      return User.create(user).$promise;
    }

    return {
      login: login,
      logout: logout,
      register: register
    };
  }]);

护照策略:

 "local": {
    "provider": "local",
    "module": "passport-local",
    "usernameField": "email",
    "passwordField": "password",
    "authPath": "/auth/local",
    "successRedirect": "/auth/account",
    "failureRedirect": "/local",
    "failureFlash": true
      },
   ... 
   ...

model-config.json

{ 
  "User": {
    "dataSource": "db"
  },
  "AccessToken": {
    "dataSource": "db",
    "public": false
  },
  "ACL": {
    "dataSource": "db",
    "public": false
  },
  "RoleMapping": {
    "dataSource": "db",
    "public": false
  },
  "Role": {
    "dataSource": "db",
    "public": false
  }
}

但现在我不知道如何添加 Angular 色,以便我可以区分用户和用户 Angular 色。如何在 loopback-component-passport 的内置模型中设置用户 Angular 色?

最佳答案

首先创建一个文件并在数据库中添加 Angular 色
server/boot/role.js:

module.exports = function(app) {
  var Role = app.models.Role;
  Role.create([
      {name: 'admin'},
      {name: 'user'}]
    , function(err, role) {
      if (err) throw err;
      console.log('Created roles:', role);
    });
};

使用模型 Hook 方法 <强> https://docs.strongloop.com/display/public/LB/Operation+hooks

server/boot/user.js

module.exports = function(app) {
  var User = app.models.user;
  var Role = app.models.Role;
  var RoleMapping = app.models.RoleMapping;
  User.observe('after save', function setDefaultUsername(ctx, next) {
    if (ctx.instance) {
      if (ctx.isNewInstance) {
        var userRole = ctx.instance.isAdmin ? 'admin' : 'user';
        Role.findOne({where: {name: userRole}}, function(err, role) {
          if (err) {
            return console.log(err);
          }
          RoleMapping.create({
            principalType: RoleMapping.USER,
            principalId: ctx.instance.id,
            roleId: role.id
          }, function(err, roleMapping) {
            if (err) {
              return console.log(err);
            }
          });
        });
      }
    }
    next();
  });
};

查看 Github 上的完整示例

关于angularjs - 使用 Loopback-component-passport 将环回中的用户角色设置为内置模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35416054/

相关文章:

javascript - 停止由 $animate.addClass 启动的动画

angularjs - 在 angular-ui-select 多选模式下禁用选定的选项

arrays - 为什么 ng-bind 不适用于数组?

ruby-on-rails - 如何在compoundjs Controller 中从json检索数据

node.js - 无法本地启动heroku

javascript - 当输入具有范围指令时,Angularjs 绑定(bind)问题

node.js - 当我尝试在环回 (strongloop) web 应用程序中安装依赖项时出现 Npm 错误

javascript - 解决带有嵌套 promise 的对象的美丽方法?

loopbackjs - 将 'persist' 中的上下文传递到 'after save'

node.js - loopback 4中如何编写单元测试用例