package cn.lili.common.security; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.BeanUtil; import java.util.Objects; /** * 全局统一判定是否可操作某属性 * * @author Chopper * @version v1.0 * 2020-08-20 18:07 */ public class OperationalJudgment { /** * 需要判定的对象必须包含属性 memberId,storeId 代表判定的角色 * * @param object 判定的对象 * @param 判定处理对象 * @return 处理结果 */ public static T judgment(T object) { return judgment(object, "memberId", "storeId"); } /** * 需要判定的对象必须包含属性 memberId,storeId 代表判定的角色 * * @param object 判定对象 * @param buyerIdField 买家id * @param storeIdField 店铺id * @param 范型 * @return 返回判定本身,防止多次查询对象 */ public static T judgment(T object, String buyerIdField, String storeIdField) { AuthUser tokenUser = Objects.requireNonNull(UserContext.getCurrentUser()); switch (tokenUser.getRole()) { case MANAGER: return object; case MEMBER: if (tokenUser.getId().equals(BeanUtil.getFieldValueByName(buyerIdField, object))) { return object; } else { throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); } case STORE: if (tokenUser.getStoreId().equals(BeanUtil.getFieldValueByName(storeIdField, object))) { return object; } else { throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); } default: throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); } } }