Aynı konuyla karşılaştığımda hibrit bir çözüm buldum. Enum'u kabul eden kendi hasPermission()
yöntemimi sağlamak için Spring-El ve özel bir fasulye kullanıyorum. Spring'in çalışma zamanında otomatik olarak bir string->enum
dönüşümü yaptığı düşünüldüğünde, dizede bir yazım hatası varsa belirli bir enumun bulunmadığı bir çalışma zamanı istisnası alacağım. İdeal çözüm değil (derleme zamanında başarısız olan bir şey vardı), ama kabul edilebilir bir uzlaşma. Bana yarı tip bir güvenlik veriyor. olarak kullanılır
@Component("securityService")
public class SecurityService {
public boolean hasPermission(Permission...permissions){
// loop over each submitted role and validate the user has at least one
Collection<? extends GrantedAuthority> userAuthorities = SecurityContextHolder.getContext().getAuthentication().getAuthorities();
for(Permission permission : permissions){
if(userAuthorities.contains(new SimpleGrantedAuthority(permission.name())))
return true;
}
// no matching role found
return false;
}
}
aşağıdaki gibidir: Bu gelecekte başkası yardımcı olabilir
public enum Permission {
USER_LIST,
USER_EDIT,
USER_ADD,
USER_ROLE_EDIT
}
Umut: İzin sadece normal enum tanımıdır
@PreAuthorize("@securityService.hasPermission({'USER_ADD'})")
public User addUser(User user){
// create the user
return userRepository.save(user);
}
. @PreAuthorize içinde Concat MyEnum değerleri
@PreAuthorize("hasPermission('myDomain', '"+ MyEnum.Names.ENUM_A+"')")
- - senin enum bu
2 gibi bir kamu nihai static String "DEĞERİ" referans tanımla
1: –
Hayır, mermiyi ısırdım ve dizeleri kullandım = ( – user1751547