我正在尝试使用 npm loopback-component-passport
在环回中创建用户,并根据条件创建用户 Angular 色,
- 如果用户拥有属性
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
},
...
...
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/