Browse Source

更新对象访问权限

reghao 2 years ago
parent
commit
8c9bca9b10

+ 2 - 2
dfs-store/src/main/java/cn/reghao/dfs/store/db/repository/ObjectRepository.java

@@ -46,13 +46,13 @@ public class ObjectRepository {
     public void delete(FileMeta fileMeta) {
     public void delete(FileMeta fileMeta) {
     }
     }
 
 
-    //@Cacheable(cacheNames = "fileMeta", key = "#objectName", unless = "#result == null")
+    @Cacheable(cacheNames = "fileMeta", key = "#objectName", unless = "#result == null")
     public FileMeta getByObjectName(String objectName) {
     public FileMeta getByObjectName(String objectName) {
         log.info("查找 db");
         log.info("查找 db");
         return fileMetaMapper.findByObjectName(objectName);
         return fileMetaMapper.findByObjectName(objectName);
     }
     }
 
 
-    //@Cacheable(cacheNames = "fileMeta", key = "#sha256sum", unless = "#result == null")
+    @Cacheable(cacheNames = "fileMeta", key = "#sha256sum", unless = "#result == null")
     public FileMeta getBySha256sum(String sha256sum) {
     public FileMeta getBySha256sum(String sha256sum) {
         return fileMetaMapper.findBySha256sum(sha256sum);
         return fileMetaMapper.findBySha256sum(sha256sum);
     }
     }

+ 30 - 14
dfs-store/src/main/java/cn/reghao/dfs/store/inerceptor/AccessLogInterceptor.java

@@ -3,6 +3,7 @@ package cn.reghao.dfs.store.inerceptor;
 import cn.reghao.dfs.store.db.repository.ObjectRepository;
 import cn.reghao.dfs.store.db.repository.ObjectRepository;
 import cn.reghao.dfs.store.model.po.FileMeta;
 import cn.reghao.dfs.store.model.po.FileMeta;
 import cn.reghao.dfs.store.util.UserContext;
 import cn.reghao.dfs.store.util.UserContext;
+import cn.reghao.oss.api.constant.ObjectACL;
 import cn.reghao.tnb.account.api.dto.UserPermission;
 import cn.reghao.tnb.account.api.dto.UserPermission;
 import cn.reghao.tnb.account.api.iface.UserQuery;
 import cn.reghao.tnb.account.api.iface.UserQuery;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -35,26 +36,18 @@ public class AccessLogInterceptor implements HandlerInterceptor {
     }
     }
 
 
     @Override
     @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
-            throws Exception {
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         String uri = request.getRequestURI();
         String uri = request.getRequestURI();
         String method = request.getMethod();
         String method = request.getMethod();
         if (method.equals("OPTIONS")) {
         if (method.equals("OPTIONS")) {
             return true;
             return true;
         }
         }
-
-        //checkPermission(method, uri, response);
-        String userAgent = request.getHeader("user-agent");
-        String ipv4 = request.getRemoteAddr();
-        String referer = request.getHeader("referer");
-        String sign = request.getParameter("sign");
-        log.info("{} -> {}", method, uri);
-        return true;
+        return checkPermission(method, uri, response);
     }
     }
 
 
     private boolean checkPermission(String method, String uri,  HttpServletResponse response) {
     private boolean checkPermission(String method, String uri,  HttpServletResponse response) {
         long userId = UserContext.getUser();
         long userId = UserContext.getUser();
-        UserPermission userPermission = userQuery.getUserPermission(userId);
+        //UserPermission userPermission = userQuery.getUserPermission(userId);
         if (method.equals("GET") || method.equals("HEAD")) {
         if (method.equals("GET") || method.equals("HEAD")) {
             String objectName = URLDecoder.decode(uri, StandardCharsets.UTF_8).replaceFirst("/", "");
             String objectName = URLDecoder.decode(uri, StandardCharsets.UTF_8).replaceFirst("/", "");
             FileMeta fileMeta = objectRepository.getByObjectName(objectName);
             FileMeta fileMeta = objectRepository.getByObjectName(objectName);
@@ -63,11 +56,19 @@ public class AccessLogInterceptor implements HandlerInterceptor {
                 return false;
                 return false;
             }
             }
 
 
-            boolean diskFile = fileMeta.getDiskFile();
+            long uploadBy = fileMeta.getUploadBy();
+            if (userId == uploadBy) {
+                return true;
+            }
+
             int acl = fileMeta.getAcl();
             int acl = fileMeta.getAcl();
-            if (acl == 1) {
+            if (acl == ObjectACL.PRIVATE.getCode()) {
                 response.setStatus(HttpServletResponse.SC_FORBIDDEN);
                 response.setStatus(HttpServletResponse.SC_FORBIDDEN);
                 return false;
                 return false;
+            } else if (acl == ObjectACL.PUBLIC.getCode()) {
+                return true;
+            } else if (acl == ObjectACL.FRIEND.getCode()) {
+                return userQuery.isFriend(userId, uploadBy);
             }
             }
         } else if (method.equals("PUT") || method.equals("POST")) {
         } else if (method.equals("PUT") || method.equals("POST")) {
             if (userId == -1) {
             if (userId == -1) {
@@ -82,11 +83,26 @@ public class AccessLogInterceptor implements HandlerInterceptor {
     @Override
     @Override
     public void postHandle(HttpServletRequest request, HttpServletResponse response,
     public void postHandle(HttpServletRequest request, HttpServletResponse response,
                            Object handler, @Nullable ModelAndView modelAndView) throws Exception {
                            Object handler, @Nullable ModelAndView modelAndView) throws Exception {
-
+        String uri = request.getRequestURI();
+        String method = request.getMethod();
+        int statusCode = response.getStatus();
+        String userAgent = request.getHeader("user-agent");
+        String ipv4 = request.getRemoteAddr();
+        String referer = request.getHeader("referer");
+        String sign = request.getParameter("sign");
+        log.info("{}", statusCode);
     }
     }
 
 
     @Override
     @Override
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                 Object handler, @Nullable Exception ex) throws Exception {
                                 Object handler, @Nullable Exception ex) throws Exception {
+        String uri = request.getRequestURI();
+        String method = request.getMethod();
+        int statusCode = response.getStatus();
+        String userAgent = request.getHeader("user-agent");
+        String ipv4 = request.getRemoteAddr();
+        String referer = request.getHeader("referer");
+        String sign = request.getParameter("sign");
+        log.info("{} {} -> {} {}", statusCode, method, uri, userAgent);
     }
     }
 }
 }

+ 1 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/inerceptor/JwtTokenFilter.java

@@ -28,7 +28,7 @@ public class JwtTokenFilter implements Filter {
             throws IOException, ServletException {
             throws IOException, ServletException {
         HttpServletRequest httpServletRequest = (HttpServletRequest) request;
         HttpServletRequest httpServletRequest = (HttpServletRequest) request;
         String jwtToken = getJwtToken(httpServletRequest);
         String jwtToken = getJwtToken(httpServletRequest);
-        Long userId = 10001L;
+        Long userId = -1L;
         if (jwtToken != null) {
         if (jwtToken != null) {
             /*try {
             /*try {
                 JwtPayload jwtPayload = Jwt.parse(jwtToken, "");
                 JwtPayload jwtPayload = Jwt.parse(jwtToken, "");

+ 1 - 2
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/FileMeta.java

@@ -40,8 +40,7 @@ public class FileMeta extends BaseObject<Integer> {
         this.contentType = "0";
         this.contentType = "0";
         this.sha256sum = "0";
         this.sha256sum = "0";
         this.pid = pid;
         this.pid = pid;
-        //this.uploadBy = UserContext.getUser();
-        this.uploadBy = 10001L;
+        this.uploadBy = UserContext.getUser();
         this.diskFile = false;
         this.diskFile = false;
         this.acl = acl;
         this.acl = acl;
     }
     }