将使用loopback-component-passport的用户angular色设置为内置模型

我正在尝试使用npm loopback-component-passport来创build基于条件的用户,

  1. 如果用户有属性isAdmin:true他应该有adminangular色
  2. 如果用户有属性isAdmin:false他应该有userangular色

这是我的代码:

 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 }, ... ... 

模型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色?

最初创build一个文件并在DB中添加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); }); }; 

使用模型钩子方法https://docs.strongloop.com/display/public/LB/Operation+hooks

服务器的/ 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上查看完整的例子