Description
背景: 公司大部分都是业务人员,不想接入SSO,直接用Spring Security简单认证,但是这个登录只有管理员可以修改用户信息,希望普通用户登录后可以自己修改个人信息;
改造: 1、修改static/views/common/nav.html 用户退出:
user-manage-comm.html 直接拷贝的 user-manage.html
2、修改 static/scripts/services/UserService.js,增加 update_comm_user
appService.service('UserService', ['$resource', '$q', function ($resource, $q) {
var user_resource = $resource('', {}, {
load_user: {
method: 'GET',
url: '/user'
},
find_users: {
method: 'GET',
url: '/users'
},
create_or_update_user: {
method: 'POST',
url: '/users'
},
update_comm_user: {
method: 'POST',
url: '/userscomm'
}
});
return {
load_user: function () {
var finished = false;
var d = $q.defer();
user_resource.load_user({},
function (result) {
finished = true;
d.resolve(result);
},
function (result) {
finished = true;
d.reject(result);
});
return d.promise;
},
find_users: function (keyword) {
var d = $q.defer();
user_resource.find_users({
keyword: keyword
},
function (result) {
d.resolve(result);
},
function (result) {
d.reject(result);
});
return d.promise;
},
createOrUpdateUser: function (user) {
var d = $q.defer();
user_resource.create_or_update_user({}, user,
function (result) {
d.resolve(result);
},
function (result) {
d.reject(result);
});
return d.promise;
},
updateCommUser: function (user) {
var d = $q.defer();
user_resource.update_comm_user({}, user,
function (result) {
d.resolve(result);
},
function (result) {
d.reject(result);
});
return d.promise;
}
}
}]);
3、修改 com/ctrip/framework/apollo/portal/spi/springsecurity/SpringSecurityUserService.java,增加 @Transactional public void updateComm(UserPO user) { String username = user.getUsername();
User userDetails = new User(username, encoder.encode(user.getPassword()), authorities);
if (userDetailsManager.userExists(username)) {
userDetailsManager.updateUser(userDetails);
UserPO managedUser = userRepository.findByUsername(username);
managedUser.setEmail(user.getEmail());
userRepository.save(managedUser);
}
}
4、修改 com/ctrip/framework/apollo/portal/controller/UserInfoController.java 增加 @PostMapping("/userscomm") public void updateCommUser(@RequestBody UserPO user) { if (StringUtils.isContainEmpty(user.getUsername(), user.getPassword())) { throw new BadRequestException("Username and password can not be empty."); }
if (userService instanceof SpringSecurityUserService) {
((SpringSecurityUserService) userService).updateComm(user);
} else {
throw new UnsupportedOperationException("Create or update user operation is unsupported");
}
}
5、经过上面步骤,此时普通用户可以修改用户信息,但是希望只能修改自己的信息,所以希望用户名文本框是带回回显只读,并绑定user.username,但是 directive 导入的userName无法赋值,文本框是空值,自己写的例子可以,但是apollo工程中修改/user-manage-comm.html 用户名文本框就不行。 方法一: 修改 /user-manage-comm.html 或
方法二: 修改 /user-manage-comm.html 修改 static/scripts/controller/UserController.js $scope.user={} 改为 $scope.user={"username":$scope.userName};
6、将上面方法二 修改 static/scripts/controller/UserController.js $scope.user={} 改为 $scope.user={"username":"zhangsan"}; 这样文本框可以回显
请各位指教。