From 87d8d696861bdcbebe53118f9eabd8e62869ca27 Mon Sep 17 00:00:00 2001 From: LO Kam Tao Leo Date: Thu, 3 Feb 2022 10:57:30 +0000 Subject: [PATCH] Handle a new special user "any" for permission purpose --- src/org/leolo/web/dm/Constant.java | 1 + src/org/leolo/web/dm/dao/ProjectDao.java | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/org/leolo/web/dm/Constant.java b/src/org/leolo/web/dm/Constant.java index 49a98f5..db248af 100644 --- a/src/org/leolo/web/dm/Constant.java +++ b/src/org/leolo/web/dm/Constant.java @@ -26,4 +26,5 @@ public class Constant { //Common value public static final int COM_DEFAULT_USER_ID = 1; + public static final int COM_ANY_USER_ID = 2; } diff --git a/src/org/leolo/web/dm/dao/ProjectDao.java b/src/org/leolo/web/dm/dao/ProjectDao.java index 99d0655..cb98ef1 100644 --- a/src/org/leolo/web/dm/dao/ProjectDao.java +++ b/src/org/leolo/web/dm/dao/ProjectDao.java @@ -135,6 +135,12 @@ public class ProjectDao extends BaseDao{ return 1 == rs.getInt(1); } } + pstmt.setInt(2, Constant.COM_ANY_USER_ID); + try(ResultSet rs = pstmt.executeQuery()){ + if(rs.next()) { + return 1 == rs.getInt(1); + } + } pstmt.setInt(2, Constant.COM_DEFAULT_USER_ID); try(ResultSet rs = pstmt.executeQuery()){ if(rs.next()) { @@ -149,16 +155,18 @@ public class ProjectDao extends BaseDao{ public Collection getAllProjects(int userId){ Vector v = new Vector<>(); - String sql = "SELECT p.project_id, project_path, project_name, mode, description, nvl(pu.`read`,dpu.`read`) " + String sql = "SELECT p.project_id, project_path, project_name, mode, description, nvl(pu.`read`,nvl(apu.`read`,dpu.`read`)) " + "FROM project p " + "JOIN project_user dpu ON p.project_id = dpu.project_id AND dpu.user_id = ? " + + "LEFT OUTER JOIN project_user apu ON p.project_id = apu.project_id AND apu.user_id = ? " + "LEFT OUTER JOIN project_user pu ON p.project_id = pu.project_id AND pu.user_id = ?"; try( Connection conn = getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql); ){ pstmt.setInt(1, Constant.COM_DEFAULT_USER_ID); - pstmt.setInt(2, userId); + pstmt.setInt(2, userId==Constant.COM_DEFAULT_USER_ID?Constant.COM_DEFAULT_USER_ID:Constant.COM_ANY_USER_ID); + pstmt.setInt(3, userId); try(ResultSet rs = pstmt.executeQuery()){ while(rs.next()) { if(1==rs.getInt(6)) {