//idega 2000 - Tryggvi Larusson
/*
* Copyright 2000 idega.is All Rights Reserved.
*/
package is.idega.idegaweb.golf.access;
import is.idega.idegaweb.golf.entity.Group;
import is.idega.idegaweb.golf.entity.Member;
import java.sql.SQLException;
import com.idega.core.accesscontrol.business.LoginBusinessBean;
import com.idega.presentation.IWContext;
import com.idega.presentation.PresentationObject;
/**
* @author <a href="mailto:tryggvi@idega.is">Tryggvi Larusson </a>
* @version 1.0
*/
public class AccessControl {
public static final String ACCESSCONTROL_GROUP_PARAMETER = "iw_accesscontrol_group";
public static final String PRM_PREFIX = "golf_";
public static final String LOGIN_STATE_PARAMETER = PRM_PREFIX+LoginBusinessBean.LoginStateParameter;
public static final String USER_ATTRIBUTE_PARAMETER = "member_login";
public static final String ADMIN_GROUP = "administrator";
public static final String CLUB_ADMIN_GROUP = "club_admin";
public static final String CLUB_WORKER_GROUP = "club_worker";
public static final String TOURNAMENT_MANAGER_GROUP = "tournament_manager";
public static final String CURRENT_GOLF_UNION_ID_ATTRIBUTE = "golf_union_id";
public static final String CLUB_ADMIN_GOLF_UNION_ID_ATTRIBUTE = "admin_golf_union_id";
public static void internalSetState(IWContext modinfo, String state) {
modinfo.setSessionAttribute(LOGIN_STATE_PARAMETER, state);
}
public static Member getMember(IWContext modinfo) {
return (Member) modinfo.getSession().getAttribute(USER_ATTRIBUTE_PARAMETER);
}
public static String getAccesscontrolGroupForUser(IWContext modinfo) {
return (String) modinfo.getSessionAttribute(ACCESSCONTROL_GROUP_PARAMETER);
}
public static void setCurrentGolfUnionID(IWContext modinfo, String unionID) {
modinfo.setSessionAttribute(CURRENT_GOLF_UNION_ID_ATTRIBUTE, unionID);
}
public static String getCurrentGolfUnionID(IWContext modinfo) {
return (String) modinfo.getSessionAttribute(CURRENT_GOLF_UNION_ID_ATTRIBUTE);
}
public static String getGolfUnionOfClubAdmin(IWContext modinfo) {
return (String) modinfo.getSessionAttribute(CLUB_ADMIN_GOLF_UNION_ID_ATTRIBUTE);
}
static void setGolfUnionOfClubAdmin(IWContext modinfo, String unionID) {
modinfo.setSessionAttribute(CLUB_ADMIN_GOLF_UNION_ID_ATTRIBUTE, unionID);
}
public static void setAccesscontrolGroupForUser(IWContext modinfo, String accessControlGroup) {
modinfo.setSessionAttribute(ACCESSCONTROL_GROUP_PARAMETER, accessControlGroup);
}
public static boolean isAdmin(IWContext modinfo) throws SQLException {
Member member = getMember(modinfo);
if (member == null) {
return false;
}
String acc_group = getAccesscontrolGroupForUser(modinfo);
if (acc_group == null) {
Group[] access = member.getGroups(); // (member).getGenericGroups();
for (int i = 0; i < access.length; i++) {
if ("administrator".equals(access[i].getName())) {
setAccesscontrolGroupForUser(modinfo, ADMIN_GROUP);
return true;
}
if ("club_admin".equals(access[i].getName())) {
int uni_id = member.getMainUnionID();
setAccesscontrolGroupForUser(modinfo, CLUB_ADMIN_GROUP);
setGolfUnionOfClubAdmin(modinfo, Integer.toString(uni_id));
Object ID = modinfo.getSessionAttribute(CURRENT_GOLF_UNION_ID_ATTRIBUTE);
if (ID != null) {
if (uni_id == Integer.parseInt(((String) ID))) {
return true;
}
}
}
}
return false;
}
if (acc_group.equals(ADMIN_GROUP)) {
return true;
}
if (acc_group.equals(CLUB_ADMIN_GROUP)) {
String currentUnion = getCurrentGolfUnionID(modinfo);
if (currentUnion != null) {
if (currentUnion.equals(getGolfUnionOfClubAdmin(modinfo))) {
return true;
}
}
}
return false;
}
public static boolean hasPermission(String permissionType, PresentationObject obj, IWContext info) {
try {
return info.getAccessController().hasPermission(permissionType, obj, info);
//return
// com.idega.core.accesscontrol.business.AccessControl.hasPermission(permissionType,obj,info);
}
catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
public static boolean isDeveloper(IWContext modinfo) {
return (modinfo.getSession().getAttribute("member_access") != null) && (modinfo.getSession().getAttribute("member_access").equals("developer"));
}
public static boolean isClubAdmin(IWContext modinfo) {
return (modinfo.getSession().getAttribute("member_access") != null) && (modinfo.getSession().getAttribute("member_access").equals("club_admin"));
}
public static boolean isUser(IWContext modinfo) {
return (modinfo.getSession().getAttribute("member_access") != null) && (modinfo.getSession().getAttribute("member_access").equals("user"));
}
public static boolean isClubWorker(IWContext modinfo) throws SQLException {
Member member = getMember(modinfo);
if (member == null) {
return false;
}
Group[] access = member.getGroups(); // (member).getGenericGroups();
for (int i = 0; i < access.length; i++) {
if ("administrator".equals(access[i].getName())) {
return true;
}
if ("club_worker".equals(access[i].getName())) {
Object ID = modinfo.getSessionAttribute("golf_union_id");
if (ID != null) {
int uni_id = member.getMainUnionID();
if (uni_id == Integer.parseInt(((String) ID))) {
return true;
}
}
}
}
return false;
}
public static boolean isTournamentManager(IWContext modinfo) throws SQLException {
Member member = getMember(modinfo);
if (member == null) {
return false;
}
Group[] access = member.getGroups(); // (member).getGenericGroups();
for (int i = 0; i < access.length; i++) {
if ("administrator".equals(access[i].getName())) {
return true;
}
if ("tournament_manager".equals(access[i].getName())) {
return true;
}
}
return false;
}
public static boolean isLoggedOn(IWContext context) {
if (context.getSessionAttribute(AccessControl.USER_ATTRIBUTE_PARAMETER) == null) {
return false;
}
return true;
}
}