From 7ee9b3d799a633207922bf79c825514fc2b915b1 Mon Sep 17 00:00:00 2001 From: kataus Date: Wed, 3 Jun 2020 21:30:29 +0300 Subject: [PATCH] =?UTF-8?q?Spring=202020=5F02=20=D0=BF=D1=80=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=D1=8B=20=D0=BA=2024=20=D0=B7=D0=B0=D0=BD=D1=8F?= =?UTF-8?q?=D1=82=D0=B8=D1=8E=20(ACL)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ru/otus/spring/service/NoticeService.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 2020-02/spring-24-SS-ACL/src/main/java/ru/otus/spring/service/NoticeService.java diff --git a/2020-02/spring-24-SS-ACL/src/main/java/ru/otus/spring/service/NoticeService.java b/2020-02/spring-24-SS-ACL/src/main/java/ru/otus/spring/service/NoticeService.java new file mode 100644 index 00000000..f7f878fc --- /dev/null +++ b/2020-02/spring-24-SS-ACL/src/main/java/ru/otus/spring/service/NoticeService.java @@ -0,0 +1,42 @@ +package ru.otus.spring.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.acls.domain.BasePermission; +import org.springframework.security.acls.domain.GrantedAuthoritySid; +import org.springframework.security.acls.domain.ObjectIdentityImpl; +import org.springframework.security.acls.domain.PrincipalSid; +import org.springframework.security.acls.model.MutableAcl; +import org.springframework.security.acls.model.MutableAclService; +import org.springframework.security.acls.model.ObjectIdentity; +import org.springframework.security.acls.model.Sid; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Service; +import ru.otus.spring.model.NoticeMessage; +import ru.otus.spring.repository.NoticeMessageRepository; + +@Service +public class NoticeService { + @Autowired + protected MutableAclService mutableAclService; + + @Autowired + private NoticeMessageRepository repository; + + public void add( NoticeMessage noticeMessage ) { + repository.save( noticeMessage ); + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + final Sid owner = new PrincipalSid( authentication ); + ObjectIdentity oid = new ObjectIdentityImpl( noticeMessage.getClass(), noticeMessage.getId() ); + + final Sid admin = new GrantedAuthoritySid("ROLE_EDITOR"); + + MutableAcl acl = mutableAclService.createAcl( oid ); + acl.setOwner( owner ); + acl.insertAce( acl.getEntries().size(), BasePermission.ADMINISTRATION, admin, true ); + + mutableAclService.updateAcl( acl ); + + + } +}