/* * #%L * BroadleafCommerce Open Admin Platform * %% * Copyright (C) 2009 - 2013 Broadleaf Commerce * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ package org.broadleafcommerce.openadmin.server.security.service; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.broadleafcommerce.openadmin.server.security.domain.AdminPermission; import org.broadleafcommerce.openadmin.server.security.domain.AdminRole; import org.broadleafcommerce.openadmin.server.security.domain.AdminUser; import org.springframework.dao.DataAccessException; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.GrantedAuthorityImpl; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; /** * @author Jeff Fischer */ public class AdminUserDetailsServiceImpl implements UserDetailsService { @Resource(name="blAdminSecurityService") protected AdminSecurityService adminSecurityService; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { AdminUser adminUser = adminSecurityService.readAdminUserByUserName(username); if (adminUser == null || adminUser.getActiveStatusFlag() == null || !adminUser.getActiveStatusFlag()) { throw new UsernameNotFoundException("The user was not found"); } List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); for (AdminRole role : adminUser.getAllRoles()) { for (AdminPermission permission : role.getAllPermissions()) { if(permission.isFriendly()) { for (AdminPermission childPermission : permission.getAllChildPermissions()) { authorities.add(new SimpleGrantedAuthority(childPermission.getName())); } } else { authorities.add(new SimpleGrantedAuthority(permission.getName())); } } } for (AdminPermission permission : adminUser.getAllPermissions()) { if(permission.isFriendly()) { for (AdminPermission childPermission : permission.getAllChildPermissions()) { authorities.add(new SimpleGrantedAuthority(childPermission.getName())); } } else { authorities.add(new SimpleGrantedAuthority(permission.getName())); } } for (String perm : AdminSecurityService.DEFAULT_PERMISSIONS) { authorities.add(new GrantedAuthorityImpl(perm)); } return new AdminUserDetails(adminUser.getId(), username, adminUser.getPassword(), true, true, true, true, authorities); } }