package aop.example;

import aop.example.model.Album;
import aop.example.model.AnonymousUser;
import aop.example.model.User;

/**
 * Класс инкапсулирующий логику проверки прав на объект
 * @author Zubairov Renat
 */
public class AuthHelper {

	/**
	 * Метод проверяющий может ли пользователь
	 * прочитать объект
	 * Все методы на чтение доступны всем
	 * возвращает всегда true
	 * @param user Текущий пользователь
	 * @param object Объект права на который необходимо проверить 
	 * @return дать доступ или не дать
	 */
	public static boolean isAbleToRead(AnonymousUser user, Object object) {
		return true;
	}
	
	/**
	 * Метод проверяющий может ли пользователь добавить объект
	 * Только аутентифицированные пользователи могут добавлять
	 * новые альбомы
	 * @param user Текущий пользователь
	 * @param object Объект права на который необходимо проверить 
	 * @return дать доступ или не дать
	 */
	public static boolean isAbleToAdd(AnonymousUser user, Object object) {
		return user instanceof User;
	}
	
	/**
	 * Метод проверяющий может ли пользователь удалить объект
	 * Пользователи могут удалять только "свои" альбомы
	 * @param user Текущий пользователь
	 * @param object Объект права на который необходимо проверить 
	 * @return дать доступ или не дать
	 */
	public static boolean isAbleToDelete(AnonymousUser user, Object object) {
		boolean result = false;
		if ((user instanceof User) && (object instanceof Album)) {
			result = ((Album) object).getOwner().getLogin().equals(((User)user).getLogin());
		}
		return result;
	}
	
}
