package  permission 
 
import  ( 
	"github.com/gofiber/fiber/v2"  
	"github.com/limanmys/render-engine/app/models"  
	"github.com/limanmys/render-engine/internal/liman"  
	"github.com/limanmys/render-engine/pkg/helpers"  
	"github.com/limanmys/render-engine/pkg/logger"  
) 
 
 
func  New  () fiber .Handler  { 
	return  permission  
} 
 
 
func  permission(c  *fiber .Ctx ) error  { 
	user , err  := liman .GetUser (&models .User { 
		ID : c .Locals ("user_id" ).(string ), 
	}) 
	if  err  != nil  { 
		return  logger .FiberError (fiber .StatusInternalServerError , "error while getting the user" ) 
	} 
 
	if  helpers .Env ("LIMAN_RESTRICTED" , "false" ) == "true"  { 
		return  c .Next () 
	} 
 
	if  user .Status  == 1  { 
		return  c .Next () 
	} 
 
	perms , err  := liman .GetObjectPermissions (user ) 
	if  err  != nil  { 
		return  logger .FiberError (fiber .StatusInternalServerError , "error while getting the object permissions" ) 
	} 
 
	if  len (c .FormValue ("server_id" )) > 0  { 
		if  !helpers .Contains (perms , c .FormValue ("server_id" )) { 
			return  logger .FiberError (fiber .StatusForbidden , "you have no permission to do this" ) 
		} 
	} 
 
	if  len (c .FormValue ("extension_id" )) > 0  { 
		extensionID  := c .FormValue ("extension_id" ) 
		if  !helpers .CheckUUID (extensionID ) { 
			extension , err  := liman .GetExtension (&models .Extension {Name : extensionID }) 
			if  err  != nil  { 
				return  err  
			} 
 
			extensionID  = extension .ID  
		} 
 
		if  !helpers .Contains (perms , extensionID ) || len (extensionID ) < 1  { 
			return  logger .FiberError (fiber .StatusForbidden , "you have no permission to do this" ) 
		} 
 
		c .Locals ("extension_id" , extensionID ) 
	} 
 
	return  c .Next () 
} 
  
The pages are generated with Golds   v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds  is a Go 101  project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1  (reachable from the left QR code) to get the latest news of Golds .