diff --git a/src/main/java/love/sola/netsupport/api/admin/Login.java b/src/main/java/love/sola/netsupport/api/admin/Login.java index 50161c1..38234a6 100644 --- a/src/main/java/love/sola/netsupport/api/admin/Login.java +++ b/src/main/java/love/sola/netsupport/api/admin/Login.java @@ -2,6 +2,7 @@ package love.sola.netsupport.api.admin; import com.google.gson.Gson; import love.sola.netsupport.api.Response; +import love.sola.netsupport.enums.Access; import love.sola.netsupport.pojo.Operator; import love.sola.netsupport.sql.SQLCore; import love.sola.netsupport.util.Checker; @@ -52,7 +53,8 @@ public class Login extends HttpServlet { try (Session s = SQLCore.sf.openSession()) { Operator operator = s.get(Operator.class, Integer.parseInt(opId)); - if (operator == null) return new Response(Response.ResponseCode.OPERATOR_NOT_FOUND); + if (operator == null || operator.getAccess() == Access.NOLOGIN) + return new Response(Response.ResponseCode.OPERATOR_NOT_FOUND); if (!wechat.equals(operator.getWechat())) return new Response(Response.ResponseCode.INCORRECT_WECHAT); if (!Crypto.check(password,operator.getPassword())) diff --git a/src/main/java/love/sola/netsupport/enums/Access.java b/src/main/java/love/sola/netsupport/enums/Access.java new file mode 100644 index 0000000..896beaf --- /dev/null +++ b/src/main/java/love/sola/netsupport/enums/Access.java @@ -0,0 +1,42 @@ +package love.sola.netsupport.enums; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +import static love.sola.netsupport.config.Lang.lang; + +/** + * *********************************************** + * Created by Sola on 2015/12/6. + * Don't modify this source without my agreement + * *********************************************** + */ +public class Access { + + public static final int ROOT = 0; + public static final int NOLOGIN = 9; + + public static final Map inverseMap = new HashMap<>(); + + static{ + System.out.println("Loading Access..."); + for (Field field : Access.class.getDeclaredFields()) { + if (field.getType().isAssignableFrom(Integer.TYPE)) { + try { + inverseMap.put((Integer) field.get(null), field.getName()); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + } + + public static String getLocalized(int access) { + if (inverseMap.containsKey(access)) { + return lang("ACCESS_" + inverseMap.get(access)); + } + return null; + } + +} diff --git a/src/main/java/love/sola/netsupport/pojo/Operator.java b/src/main/java/love/sola/netsupport/pojo/Operator.java index a1483af..c7138be 100644 --- a/src/main/java/love/sola/netsupport/pojo/Operator.java +++ b/src/main/java/love/sola/netsupport/pojo/Operator.java @@ -32,10 +32,15 @@ public class Operator { private String name; @Column(name = "access", nullable = false, insertable = false, updatable = false) private Integer access; - @Column(name = "wechat", nullable = false, insertable = false, updatable = false) + @Column(name = "wechat", insertable = false, updatable = false) private String wechat; private Integer block; private Integer week; private String password; + + //System Accounts + public static Operator USER_SELF; + public static Operator ADMIN; + } diff --git a/src/main/java/love/sola/netsupport/sql/SQLCore.java b/src/main/java/love/sola/netsupport/sql/SQLCore.java index 1cc4e6b..0d01558 100644 --- a/src/main/java/love/sola/netsupport/sql/SQLCore.java +++ b/src/main/java/love/sola/netsupport/sql/SQLCore.java @@ -37,6 +37,8 @@ public class SQLCore { sr = new StandardServiceRegistryBuilder().configure().build(); sf = new MetadataSources(sr).buildMetadata().buildSessionFactory(); + + TableOperator.init(); } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/love/sola/netsupport/sql/TableOperator.java b/src/main/java/love/sola/netsupport/sql/TableOperator.java index b6490d3..85d9838 100644 --- a/src/main/java/love/sola/netsupport/sql/TableOperator.java +++ b/src/main/java/love/sola/netsupport/sql/TableOperator.java @@ -22,5 +22,17 @@ public class TableOperator extends SQLCore { } } + public static Operator get(int id) { + try (Session s = SQLCore.sf.openSession()) { + return s.get(Operator.class, id); + } + } + + protected static void init() { + try (Session s = SQLCore.sf.openSession()) { + Operator.USER_SELF = s.get(Operator.class, -1); + Operator.ADMIN = s.get(Operator.class, 0); + } + } } diff --git a/src/main/java/love/sola/netsupport/wechat/handler/CancelHandler.java b/src/main/java/love/sola/netsupport/wechat/handler/CancelHandler.java index 3d45f90..38680c6 100644 --- a/src/main/java/love/sola/netsupport/wechat/handler/CancelHandler.java +++ b/src/main/java/love/sola/netsupport/wechat/handler/CancelHandler.java @@ -1,6 +1,7 @@ package love.sola.netsupport.wechat.handler; import love.sola.netsupport.enums.Status; +import love.sola.netsupport.pojo.Operator; import love.sola.netsupport.pojo.Ticket; import love.sola.netsupport.pojo.User; import love.sola.netsupport.sql.SQLCore; @@ -39,6 +40,7 @@ public class CancelHandler implements WxMpMessageHandler { .content(lang("No_Open_Ticket_Available")).build(); } try (Session s = SQLCore.sf.openSession()) { + t.setOperator(Operator.USER_SELF); t.setUpdateTime(new Date()); t.setRemark(lang("User_Cancel_Remark")); t.setStatus(Status.SOLVED);