package net.techreadiness.persistence.dao;
import java.util.Collection;
import java.util.List;
import net.techreadiness.persistence.domain.PermissionDO;
import net.techreadiness.persistence.domain.UserDO;
import net.techreadiness.security.PermissionCode;
import org.springframework.security.core.GrantedAuthority;
public interface UserDAO extends BaseDAO<UserDO> {
public UserDO getByUserId(final Long userId);
/**
* Retrieves a {@link UserDO} based on username.
*
* @param username
* The username of the user
* @param includeDeleted
* Whether we want to also include deleted users.
* @return The {@link UserDO} that matches the username.
*/
UserDO findByUsername(String username, boolean includeDeleted);
boolean isUserInScope(Long scopeId, Long userId);
/**
* Determine is a user has specified permissions.
*
* @param permissionCodes
* an array of permission codes required for execution. conjunction only.
* @param authorities
* the set of roles the user has been granted
* @param scopeId
* the scope point (along with ancestors) to constraint roles
* @return true if permission is in any role or user-assigned permissions.
*/
boolean hasPermission(PermissionCode[] permissionCodes, Collection<GrantedAuthority> authorities, Long scopeId);
List<UserDO> findAllUsersWithRole(Long roleId);
/**
* change password in authentication store.
*
* @param username
* @param formattedPassword
* non-plaintext password, formatted into appropriate encoding (e.g. MD5 hash)
*/
void changePassword(String username, String formattedPassword);
void resetPassword(UserDO userDO);
String getCurrentResetEmailText(UserDO userDO);
void newAccountPassword(UserDO userDO);
void forgotUsername(String email);
boolean hasAccessToOrg(Long userId, Long orgId);
boolean hasAccessToOrg(Long userId, String orgCode);
boolean isTokenValid(String username, String token);
void clearTokens(String username);
boolean isUsernameEmailPairValid(String username, String email);
boolean isEmailInUse(String email);
List<PermissionDO> findPermissionsByRoles(Collection<GrantedAuthority> roles, Long scopeId);
UserDO updateAccounts(UserDO user, String oldUsername);
void unDelete(UserDO userDO);
}