我有三排分隔表,
divsionId名称
<mat-form-field class="col-11">
<mat-select
[(ngModel)]="node.nodeType"
(change)="nodeTypeChanged()"
placeholder="{{'node.node_type' | translate}}"
[compareWith]="compareObjects">
<mat-option
*ngFor="let item of nodeTypes"
[value]="item">
<span [innerHTML]="item.iconVisual.iconCodeHtml"></span>
<span> {{item.label}}</span>
</mat-option>
</mat-select>
</mat-form-field>
和customertable之类的
custId名称DivisionId
1 divA
2 divB
3 divC
和用户表,例如
userId相同的密码roleId分区ID
1 cust01 1
2 cust02 1
3 cust03 2
4 cust04 1
5 cust05 2
6 cust06 3
7 cust07 3
8 cust08 1
角色ID名称
1 john *** 1 1
2 ravi *** 2 1
3 bush *** 2 2
4 sam *** 2 3
5 jasd *** 1 2
6 jas *** 2 2
7 jioa *** 2 3
8 saho *** 2 1
9 vija *** 1 1
当用户尝试使用以下三个参数登录时 { “ division”:“ divA”, “ uname”:“ john”, “密码”:“ ****” }
如果用户成功登录,我将生成JWT令牌,包括除法,角色等
1 ADMIN
2 USER
在这种情况下,当用户尝试从客户表访问/ listcustomers api时,他应该获得与登录用户的部门ID和仅客户分配部门的divisonId匹配的客户列表,并且他不应该能够访问任何地方的其他部门客户,这就是我在寻找问题的方式,不,我没有解决方案,请任何人帮助我,并且还有许多具有分区分配对象的api,ROLE可以正常工作,但是可以明智地进行分区我没有得到
我正在使用Spring Boot 2.0.0.Relaease,Java 8,Hibernate,JWT Authentication spring安全性
答案 0 :(得分:0)
假设您创建了jwt令牌,则可以使用 Principal 来从令牌中获取用户名。然后,定义 findByUsername ,该返回该用户的已过滤客户。
import java.security.Principal;
@GetMapping("/listcustomers")
public List<Customers> getCustomers(Principal principal){
String currentUser = principal.getName()
return customerService.findByUsername(currentUser );
}