@@ -18,6 +18,7 @@ package router
1818import (
1919 "github.com/l3montree-dev/devguard/controllers"
2020 "github.com/l3montree-dev/devguard/middlewares"
21+ "github.com/l3montree-dev/devguard/shared"
2122 "github.com/labstack/echo/v4"
2223)
2324
@@ -28,17 +29,19 @@ type ExternalReferenceRouter struct {
2829func NewExternalReferenceRouter (
2930 assetVersionRouter AssetVersionRouter ,
3031 externalReferenceController * controllers.ExternalReferenceController ,
32+ assetRepository shared.AssetRepository ,
3133) ExternalReferenceRouter {
34+ assetScopedRBAC := middlewares .AssetAccessControlFactory (assetRepository )
3235 // External references are scoped to asset versions
3336 // Read access - anyone who can read the asset version can list references
3437 refGroup := assetVersionRouter .Group .Group ("/external-references" )
3538 refGroup .GET ("/" , externalReferenceController .List ) // List all references for asset version
3639
3740 // Write access - requires asset update permission
3841 refWriteGroup := refGroup .Group ("" , middlewares .NeededScope ([]string {"manage" }))
39- refWriteGroup .POST ("/" , externalReferenceController .Create ) // Create reference
40- refWriteGroup .POST ("/sync/" , externalReferenceController .Sync ) // Sync external sources
41- refWriteGroup .DELETE ("/:id/" , externalReferenceController .Delete ) // Delete reference
42+ refWriteGroup .POST ("/" , externalReferenceController .Create , assetScopedRBAC ( shared . ObjectAsset , shared . ActionUpdate ) ) // Create reference
43+ refWriteGroup .POST ("/sync/" , externalReferenceController .Sync , assetScopedRBAC ( shared . ObjectAsset , shared . ActionUpdate ) ) // Sync external sources
44+ refWriteGroup .DELETE ("/:id/" , externalReferenceController .Delete , assetScopedRBAC ( shared . ObjectAsset , shared . ActionUpdate ) ) // Delete reference
4245
4346 return ExternalReferenceRouter {Group : refGroup }
4447}
0 commit comments