/*
* Copyright (c) 2007 TouK
* All rights reserved
*/
package pl.touk.wonderfulsecurity.utils;
import pl.touk.wonderfulsecurity.dao.WsecUserDao;
import pl.touk.wonderfulsecurity.beans.WsecPermission;
import pl.touk.wonderfulsecurity.beans.WsecUser;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.TransactionStatus;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.List;
import pl.touk.wonderfulsecurity.dao.WsecPermissionDao;
/**
* Podczas startu aplikacji sprawdza czy w systemie znajdują się wymagane uprawnienia, jeśli nie
* to do logów zostaje wypisany odpowiedni komunikat i wymagane uprawnienia systemowe zostają dodane
* do bazy.
*
* @author Lukasz Kucharski - lkc@touk.pl
*/
public class StartupConfigurer implements InitializingBean {
private static final Log log = LogFactory.getLog(StartupConfigurer.class);
protected WsecUserDao wsecUserDao;
protected WsecPermissionDao wsecPermissionDao;
/**
* Pole powinno zawierac login superadministratora tzn uzytkownika, ktory ma dostęp do calego panelu
* administracyjnego. Jesli taki uzytkownik znajduje sie w systemie zostaną mu nadane wszyskie uprawnienia
* systemowe dla administracyjnej.
*/
protected String rootLogin;
public void setRootLogin(String rootLogin) {
this.rootLogin = rootLogin;
}
public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
this.transactionTemplate = transactionTemplate;
}
protected TransactionTemplate transactionTemplate;
public void setWsecUserDao(WsecUserDao wsecUserDao) {
this.wsecUserDao = wsecUserDao;
}
public void setWsecPermissionDao(WsecPermissionDao wsecPermissionDao) {
this.wsecPermissionDao = wsecPermissionDao;
}
public void afterPropertiesSet() throws Exception {
final List<WsecPermission> available = wsecUserDao.fetchAll(WsecPermission.class);
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
for (WsecPermission systemPermission : WsecPermission.SYSTEM_PERMISSIONS_COLLECTION) {
if (!available.contains(systemPermission)) {
log.info("PODCZAS STARTU APLIKACJI NIE ZNALEZIONO UPRAWNIENIA SYSTEMOWEGO " + systemPermission);
log.info("W REZULTACIE UPRAWNIENIE O NAZWIE " + systemPermission.getName() + " ZOSTANIE DODANE ");
wsecUserDao.saveOrUpdate(systemPermission);
}
}
}
});
// teraz sprawdz czy rootLogin user istnieje jesli tak to nadaj mu wszystkie uprawnienia systemowe
if (rootLogin != null && !rootLogin.trim().equals("")) {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
WsecUser rootUser = wsecUserDao.getUserByLogin(rootLogin);
if (rootUser != null) {
log.info("ROOT USER " + rootLogin + " ZNALEZIONY NADAJE UZYTKOWNIKOWI UPRAWNIENIA SYSTEMOWE");
List<WsecPermission> systemPerms = wsecPermissionDao.fetchSystemPermissions();
rootUser.getPermissions().addAll(systemPerms);
} else {
log.info("ROOT USER " + rootLogin + " NIE ZOSTAŁ ZNALEZIONY");
}
}
});
}
}
}