package org.dayatang.security.domain;
import java.util.HashMap;
import java.util.Map;
/**
*
* Created by yyang on 15/1/14.
*/
public class SecuritySeedDataHelper {
private Map<String, FunctionalPermission> permissionMap = new HashMap<String, FunctionalPermission>();
private Map<String, Role> roleMap = new HashMap<String, Role>();
private Map<String, User> userMap = new HashMap<String, User>();
private Map<String, UserGroup> groupMap = new HashMap<String, UserGroup>();
private Map<String, Authorization> authorizationMap = new HashMap<String, Authorization>();
private FunctionalPermission getOrCreateFunctionalPermission(String functionalPermission) {
FunctionalPermission permission = permissionMap.get(functionalPermission);
if (permission == null) {
permission = new FunctionalPermission(functionalPermission);
permission.save();
permissionMap.put(functionalPermission, permission);
}
return permission;
}
public SecuritySeedDataHelper createRole(String roleName) {
getOrCreateRole(roleName);
return this;
}
private Role getOrCreateRole(String roleName) {
Role role = roleMap.get(roleName);
if (role == null) {
role = new Role(roleName);
role.save();
roleMap.put(roleName, role);
}
return role;
}
public SecuritySeedDataHelper createUser(String userName) {
getOrCreateUser(userName);
return this;
}
private User getOrCreateUser(String userName) {
User user = userMap.get(userName);
if (user == null) {
user = new MyUser(userName, "xxxx");
user.save();
userMap.put(userName, user);
}
return user;
}
public SecuritySeedDataHelper createGroup(String userGroup) {
getOrCreateGroup(userGroup);
return this;
}
private SecuritySeedDataHelper getOrCreateGroup(String userGroup) {
UserGroup group = groupMap.get(userGroup);
if (group == null) {
group = UserGroup.create(userGroup);
group.save();
groupMap.put(userGroup, group);
}
return this;
}
public SecuritySeedDataHelper authorizeRoleToUser(String roleName, String userName) {
User user = getOrCreateUser(userName);
Role role = getOrCreateRole(roleName);
Authorization authorization = new Authorization(user, role);
authorization.save();
return this;
}
public SecuritySeedDataHelper authorizeFunctionToUser(String function, String userName) {
FunctionalPermission permission = getOrCreateFunctionalPermission(function);
User user = getOrCreateUser(userName);
Authorization authorization = new Authorization(user, permission);
authorization.save();
return this;
}
public void authorizeFunctionToRole(String function, String roleName) {
FunctionalPermission permission = getOrCreateFunctionalPermission(function);
Role role = getOrCreateRole(roleName);
role.setPermissions(permission);
role.save();
}
public void clear() {
for (Authorization each : authorizationMap.values()) {
each.remove();
}
for (FunctionalPermission each : permissionMap.values()) {
each.remove();
}
for (User each : userMap.values()) {
each.remove();
}
for (Role each : roleMap.values()) {
each.remove();
}
}
}