将使用loopback-component-passport的用户angular色设置为内置模型
我正在尝试使用npm loopback-component-passport
来创build基于条件的用户,
- 如果用户有属性
isAdmin:true
他应该有admin
angular色 - 如果用户有属性
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 }, ... ...
模型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上查看完整的例子