package com.mossle.security.spi;

import org.springframework.security.core.userdetails.UsernameNotFoundException;

/**
 * 从我们的设计理念来讲，用户数据中心可能和权限控制模块是分离的两个模块， 所以每次用户登录时，都要先判断远程的用户是否存在，然后判断用户状态， 如果两者都没有问题，要么创建一个新用户，要么更新当前用户状态。
 */
public interface UserStatusFetcher {
    int STATUS_ENABLE = 0;
    int STATUS_ACCOUNT_EXPIRED = 1;
    int STATUS_ACCOUNT_LOCKED = 1 << 1;
    int STATUS_CREDENTAIL_EXPIRED = 1 << 2;

    /**
     * 根据用户名获得用户状态.
     * 
     * 如果用户存在，就会返回一个状态 如果用户不存在，就会抛出异常
     * 
     * @param username
     *            username
     * @return int
     * @throws UsernameNotFoundException
     *             not exists
     */
    int getUserStatus(String username) throws UsernameNotFoundException;
}
