11package com .codingapi .springboot .authorization ;
22
33import com .codingapi .springboot .authorization .current .CurrentUser ;
4- import com .codingapi .springboot .authorization .enhancer .DataPermissionSQLEnhancer ;
54import com .codingapi .springboot .authorization .entity .Depart ;
65import com .codingapi .springboot .authorization .entity .Unit ;
76import com .codingapi .springboot .authorization .entity .User ;
87import com .codingapi .springboot .authorization .filter .DefaultDataAuthorizationFilter ;
98import com .codingapi .springboot .authorization .handler .Condition ;
10- import com .codingapi .springboot .authorization .handler .RowHandler ;
119import com .codingapi .springboot .authorization .interceptor .SQLRunningContext ;
1210import com .codingapi .springboot .authorization .mask .ColumnMaskContext ;
1311import com .codingapi .springboot .authorization .mask .impl .BankCardMask ;
1715import com .codingapi .springboot .authorization .repository .UnitRepository ;
1816import com .codingapi .springboot .authorization .repository .UserRepository ;
1917import lombok .extern .slf4j .Slf4j ;
20- import net .sf .jsqlparser .expression .Expression ;
21- import net .sf .jsqlparser .parser .CCJSqlParserUtil ;
22- import net .sf .jsqlparser .schema .Column ;
23- import net .sf .jsqlparser .statement .Statement ;
24- import net .sf .jsqlparser .statement .select .PlainSelect ;
25- import net .sf .jsqlparser .statement .select .Select ;
26- import net .sf .jsqlparser .statement .select .SelectItem ;
27- import net .sf .jsqlparser .statement .select .SelectItemVisitor ;
2818import org .junit .jupiter .api .MethodOrderer ;
2919import org .junit .jupiter .api .Order ;
3020import org .junit .jupiter .api .Test ;
3727import org .springframework .test .annotation .Rollback ;
3828
3929import java .time .LocalDate ;
40- import java .util .HashMap ;
4130import java .util .List ;
4231import java .util .Map ;
4332
@@ -280,74 +269,43 @@ public boolean supportColumnAuthorization(String tableName, String columnName, O
280269
281270 }
282271
283-
284- // @Test
272+ @ Test
285273 @ Order (4 )
286- void test4 () throws Exception {
287- String sql = "SELECT\n " +
288- "\t t.* \n " +
289- "FROM\n " +
290- "\t (\n " +
291- "\t \t SELECT\n " +
292- "\t \t \t UNYiV.id AS '历史工作经历编号',\n " +
293- "\t \t \t UNYiV.company_name AS '历史工作单位',\n " +
294- "\t \t \t UNYiV.depart_name AS '历史工作部门',\n " +
295- "\t \t \t UNYiV.post_name AS '历史工作岗位',\n " +
296- "\t \t \t UNYiV.start_date AS '开始时间',\n " +
297- "\t \t \t UNYiV.end_date AS '结束时间',\n " +
298- "\t \t \t owasH.员工编号 AS '员工编号',\n " +
299- "\t \t \t owasH.员工姓名 AS '员工姓名',\n " +
300- "\t \t \t owasH.员工生日 AS '员工生日',\n " +
301- "\t \t \t owasH.员工地址 AS '员工地址',\n " +
302- "\t \t \t owasH.身份证号码 AS '身份证号码',\n " +
303- "\t \t \t owasH.手机号 AS '手机号',\n " +
304- "\t \t \t owasH.部门编号 AS '部门编号',\n " +
305- "\t \t \t owasH.岗位编号 AS '岗位编号',\n " +
306- "\t \t \t owasH.任现职编号 AS '任现职编号',\n " +
307- "\t \t \t owasH.社团编号 AS '社团编号',\n " +
308- "\t \t \t owasH.社团名称 AS '社团名称',\n " +
309- "\t \t \t owasH.创建时间 AS '创建时间' \n " +
310- "\t \t FROM\n " +
311- "\t \t \t t_work AS pehMS,\n " +
312- "\t \t \t t_employee AS OGwG7,\n " +
313- "\t \t \t t_work_history AS UNYiV,\n " +
314- "\t \t \t (\n " +
315- "\t \t \t \t SELECT\n " +
316- "\t \t \t \t \t WXJj8.id AS '员工编号',\n " +
317- "\t \t \t \t \t WXJj8.NAME AS '员工姓名',\n " +
318- "\t \t \t \t \t WXJj8.birth_date AS '员工生日',\n " +
319- "\t \t \t \t \t WXJj8.address AS '员工地址',\n " +
320- "\t \t \t \t \t WXJj8.id_card AS '身份证号码',\n " +
321- "\t \t \t \t \t WXJj8.phone AS '手机号',\n " +
322- "\t \t \t \t \t WXJj8.depart_id AS '部门编号',\n " +
323- "\t \t \t \t \t WXJj8.post_id AS '岗位编号',\n " +
324- "\t \t \t \t \t WXJj8.work_id AS '任现职编号',\n " +
325- "\t \t \t \t \t rnGD4.id AS '社团编号',\n " +
326- "\t \t \t \t \t rnGD4.NAME AS '社团名称',\n " +
327- "\t \t \t \t \t rnGD4.create_date AS '创建时间' \n " +
328- "\t \t \t \t FROM\n " +
329- "\t \t \t \t \t t_employee AS WXJj8,\n " +
330- "\t \t \t \t \t t_league_employee AS dEj96,\n " +
331- "\t \t \t \t \t t_league AS rnGD4 \n " +
332- "\t \t \t \t WHERE\n " +
333- "\t \t \t \t \t rnGD4.id < 100 \n " +
334- "\t \t \t \t \t AND dEj96.employee_id = WXJj8.id \n " +
335- "\t \t \t \t \t AND dEj96.league_id = rnGD4.id \n " +
336- "\t \t \t \t \t AND 1 = 1 \n " +
337- "\t \t \t ) AS owasH \n " +
338- "\t \t WHERE\n " +
339- "\t \t \t UNYiV.employee_id = OGwG7.id \n " +
340- "\t \t \t AND OGwG7.work_id = pehMS.id \n " +
341- "\t \t \t AND owasH.任现职编号 = pehMS.id \n " +
342- "\t \t \t AND 1 = 1 \n " +
343- "\t ) AS t , t_employee AS e where t.员工编号 = e.id and e.id = 1" ;
274+ void test4 () throws Exception {
275+
276+ unitRepository .deleteAll ();
277+ departRepository .deleteAll ();
278+ userRepository .deleteAll ();
279+
280+ Unit rootUnit = new Unit ("Coding总公司" );
281+ unitRepository .save (rootUnit );
282+
283+ Unit sdUnit = new Unit ("Coding山东分公司" , rootUnit .getId ());
284+ unitRepository .save (sdUnit );
285+
286+ Depart jgbDepart = new Depart ("Coding架构部" , rootUnit .getId ());
287+ departRepository .save (jgbDepart );
288+
289+ Depart xmbDepart = new Depart ("Coding项目部" , sdUnit .getId ());
290+ departRepository .save (xmbDepart );
291+
292+ User lorne = new User ("lorne" , LocalDate .parse ("1991-01-01" ), "beijing" , "110105199003078999" , "13812345678" , jgbDepart );
293+ User bob = new User ("bob" , LocalDate .parse ("1991-01-01" ), "beijing" , "110105199003078999" , "13812345678" , xmbDepart );
294+ User tom = new User ("tom" , LocalDate .parse ("1991-01-01" ), "beijing" , "110105199003078999" , "13812345678" , xmbDepart );
295+
296+ userRepository .save (lorne );
297+ userRepository .save (bob );
298+ userRepository .save (tom );
299+
300+ String sql = "select * from t_user where phone like '%1%' and id > 1 and depart_id in (select id from t_depart where id > 0)" ;
344301
345302
346303 DataAuthorizationContext .getInstance ().clearDataAuthorizationFilters ();
347304 DataAuthorizationContext .getInstance ().addDataAuthorizationFilter (new DefaultDataAuthorizationFilter () {
348305 @ Override
349306 public Condition rowAuthorization (String tableName , String tableAlias ) {
350- return super .rowAuthorization (tableName , tableAlias );
307+ String conditionTemplate = "%s.id > -100 " ;
308+ return Condition .formatCondition (conditionTemplate , tableAlias );
351309 }
352310
353311 @ Override
@@ -358,18 +316,23 @@ public <T> T columnAuthorization(String tableName, String columnName, T value) {
358316
359317 @ Override
360318 public boolean supportColumnAuthorization (String tableName , String columnName , Object value ) {
361- return true ;
319+ if ("t_depart" .equalsIgnoreCase (tableName )) {
320+ return true ;
321+ }
322+ return false ;
362323 }
363324
364325 @ Override
365326 public boolean supportRowAuthorization (String tableName , String tableAlias ) {
366- return true ;
327+ if ("t_depart" .equalsIgnoreCase (tableName )) {
328+ return true ;
329+ }
330+ return false ;
367331 }
368332 });
369333
370-
371334 List <Map <String , Object >> data = jdbcTemplate .queryForList (sql );
372- // System.out.println(data);
335+ System .out .println (data );
373336 }
374337
375338
0 commit comments