###前提・実現したいこと
Eclipseでjavを使い、
ログイン中の山田先生が自分の学生成績リストを表示したい。
###発生している問題・エラーメッセージ
ログイン中の山田先生以外の田中先生の学生もリストに表示されている。
ようには先生ごとに分けてもらいたい。
ようには山田先生は承認権限が無い情報(ほかの学生)を見れてるため、よくないのです。
###該当のソースコード
java
1 /** 承認社員を検索します。 */ 2 @GetMapping("/teacher") 3 public List<StudentInfo> findTeacher() { 4 return service.findTeacher().stream() 5 .map(StudentInfo::of) 6 .collect(Collectors.toList()); 7 } 8 9 /** 学生を検索します。 low: 先生権限のみ利用可能に */ 10 @GetMapping 11 public List<StudentInfo> findStudent() { 12 return service.findStudent().stream() 13 .map(StudentInfo::of) 14 .collect(Collectors.toList()); 15 } 16 17 @Data 18 @NoArgsConstructor 19 @AllArgsConstructor 20 public static class StudentInfo implements Dto { 21 private static final long serialVersionUID = 1L; 22 /** 学生ID */ 23 private String id; 24 /** 学生氏名 */ 25 private String name; 26 /** フリガナ */ 27 private String kana; 28 /** 先生フラグ */ 29 private boolean teacherFlag; 30 /** 権限一覧 */ 31 private Set<GroupType> groups = new HashSet<>(); 32 33 public static StudentInfo of(Student m) { 34 return of(m, new HashSet<>()); 35 } 36 37 public static StudentInfo of(Student m, Collection<GroupType> groups) { 38 StudentInfo p = new StudentInfo(); 39 p.id = m.getId(); 40 p.name = m.getName(); 41 p.kana = m.getKana(); 42 p.teacherFlag = m.isTeacherFlag(); 43 p.groups.addAll(groups); 44 return p; 45 } 46 } 47}
###試したこと
以前、UI側で
html
1li.list-group-item.l-selectable(v-for="item in unapproved", v-if="item.approverName === sessionValue().name", @click="showApproveDetail(item)")
v-ifはログインアカウントと先生(teacher)を判別するために用います。
v-forで先生権限がない情報でも見れています。それに加えてv-ifを使い、v-forの内容を分岐して、
ログイン中の方のnameは先生のnameと一致すれば、
該当するリストが表示されますが、
じゃなければ、表示させません。という考えです。
だが、HTTPの通信ログは見れるわけですから、ある意味、セキュリティ上の脆弱性になります。そのため、API側だけで 既存のAPIを書き換えたり、新たに作ったりして、そこのAPIでログインしているアカウントが先生となる一覧を返したいのです。
###補足情報(言語/FW/ツール等のバージョンなど)
他の学生の情報を見れるのは良くないから、APIのみ処理したいのであれば、どうすればよいのでしょうか。
追加:
java
1 /** 学生を検索します。 low: 先生権限のみ利用可能に */ 2 @GetMapping 3 public List<StudentInfo> findStudent() { 4 5 studentInfoList = null; 6 List<StudentInfo> StudentAll = service.findStudent().stream() 7 .map(StudentInfo::of) 8 .collect(Collectors.toList()); 9 10 for (StudentInfo studentInfo : StudentAll) { 11 12 if (studentInfo.equals(teacherId)) { 13 studentInfoList.add(studentInfo); 14 } 15 } 16 return studentInfoList; 17 }
上記のように、StudentController.javaファイルにループforとif文を使ってみましたが、うまくいかない。
もしかしたら、どこかに書き間違えていますか。
回答1件
あなたの回答
tips
プレビュー