Gdzie w DDD walidować uprawnienia użytkownika?

0

Gdzie w DDD walidować uprawnienia użytkownika?
Przykład, mam encje wishlist ktora posiada liste gift

  • tylko tworca wishlsity moze dodac nowy prezent
  • kazdy moze dodac propozycje prezentu
  • tylko tworca wishlisty moze akceptowac propozycje prezentu
  • tylko tworca wishlisty badz osoba ktora dodala propozycje moze ja usunac
  • itp, itd

Generalnie wiekszosc operacji na encji wishlist wymaga sprawdzenia kto ja wykonuje, wiec efektywnie wszystkie jej funkcje potrzebuja dostac userId by zrobic chociaz cos takiego

    fun addGift(userId: UserId, title: Title): AcceptedGift {
        require(userId == createdBy) { "User not authorized" }
        val gift = AcceptedGift(title,userId)
        gifts.add(gift)
        return gift
    }

A w serwisie aplikacyjnym,

@Service
class GiftAddingService(
    private val userProvider: UserProvider,
    private val wishlistRepository: WishlistRepository) {
    
    fun addGift(wishlistId: WishlistId, title: Title): Wishlist {
        val user = userProvider.getLoggedUser()
        val wishlist = wishlistRepository.findById(wishlistId)
        
        wishlist.addGift(user.userId, title)
        
        return wishlistRepository.save(wishlist)
    }
}

Alternatywa to przeniesienie tej logiki wlasnie do serwisu aplikacyjnego i pozbycie sie tego z warstwy domeny:

    fun addGift(wishlistId: WishlistId, title: Title): Wishlist {
        val user = userProvider.getLoggedUser()
        val wishlist = wishlistRepository.findById(wishlistId)

        require(user.userId == wishlist.createdBy) { "User not authorized" }
        wishlist.addGift(user.userId, title)

        return wishlistRepository.save(wishlist)
    }

Pytanie ktore podejscie jest lepsze? Tak jak wspomniałem, są reguły nieco bardziej skomplikowane jak prosty check czy userId == createdBy

1 użytkowników online, w tym zalogowanych: 0, gości: 1