func (s *PermissionsService) DeleteTemplate(opt *PermissionsDeleteTemplateOption) (resp *http.Response, err error) {
	err = s.ValidateDeleteTemplateOpt(opt)
	if err != nil {
		return
	}
	req, err := s.client.NewRequest("POST", "permissions/delete_template", opt)
	if err != nil {
		return
	}
	resp, err = s.client.Do(req, nil)
	if err != nil {
		return
	}
	return
}
DeleteTemplate Delete a permission template.<br />Requires the following permission: 'Administer System'.
package sonargo
import "net/http"
type PermissionsService struct {
	client *Client
}
type PermissionsCreateTemplateObject struct {
	PermissionTemplate *PermissionTemplate `json:"permissionTemplate,omitempty"`
}
type PermissionTemplate struct {
	ID                string        `json:"id,omitempty"`
	CreatedAt         string        `json:"createdAt,omitempty"`
	UpdatedAt         string        `json:"updatedAt,omitempty"`
	Description       string        `json:"description,omitempty"`
	Name              string        `json:"name,omitempty"`
	ProjectKeyPattern string        `json:"projectKeyPattern,omitempty"`
	Permissions       []*Permission `json:"permissions,omitempty"`
}
type Permission struct {
	Description        string `json:"description,omitempty"`
	GroupsCount        int64  `json:"groupsCount,omitempty"`
	Key                string `json:"key,omitempty"`
	Name               string `json:"name,omitempty"`
	UsersCount         int64  `json:"usersCount,omitempty"`
	WithProjectCreator bool   `json:"withProjectCreator,omitempty"`
}
type PermissionsSearchTemplatesObject struct {
	DefaultTemplates    []*DefaultTemplate    `json:"defaultTemplates,omitempty"`
	PermissionTemplates []*PermissionTemplate `json:"permissionTemplates,omitempty"`
	Permissions         []*Permission         `json:"permissions,omitempty"`
}
type DefaultTemplate struct {
	Qualifier  string `json:"qualifier,omitempty"`
	TemplateID string `json:"templateId,omitempty"`
}
type PermissionsAddGroupOption struct {
	GroupId    int    `url:"groupId,omitempty"`     
	GroupName  string `url:"groupName,omitempty"`   
	Permission string `url:"permission,omitempty"`  
	ProjectId  string `url:"projectId,omitempty"`   
	ProjectKey string `url:"projectKey,omitempty"`  
}
func (s *PermissionsService) AddGroup(opt *PermissionsAddGroupOption) (resp *http.Response, err error) {
	err = s.ValidateAddGroupOpt(opt)
	if err != nil {
		return
	}
	req, err := s.client.NewRequest("POST", "permissions/add_group", opt)
	if err != nil {
		return
	}
	resp, err = s.client.Do(req, nil)
	if err != nil {
		return
	}
	return
}
type PermissionsAddGroupToTemplateOption struct {
	GroupId      int    `url:"groupId,omitempty"`       
	GroupName    string `url:"groupName,omitempty"`     
	Permission   string `url:"permission,omitempty"`    
	TemplateId   string `url:"templateId,omitempty"`    
	TemplateName string `url:"templateName,omitempty"`  
}
func (s *PermissionsService) AddGroupToTemplate(opt *PermissionsAddGroupToTemplateOption) (resp *http.Response, err error) {
	err = s.ValidateAddGroupToTemplateOpt(opt)
	if err != nil {
		return
	}
	req, err := s.client.NewRequest("POST", "permissions/add_group_to_template", opt)
	if err != nil {
		return
	}
	resp, err = s.client.Do(req, nil)
	if err != nil {
		return
	}
	return
}
type PermissionsAddProjectCreatorToTemplateOption struct {
	Permission   string `url:"permission,omitempty"`    
	TemplateId   string `url:"templateId,omitempty"`    
	TemplateName string `url:"templateName,omitempty"`  
}
func (s *PermissionsService) AddProjectCreatorToTemplate(opt *PermissionsAddProjectCreatorToTemplateOption) (resp *http.Response, err error) {
	err = s.ValidateAddProjectCreatorToTemplateOpt(opt)
	if err != nil {
		return
	}
	req, err := s.client.NewRequest("POST", "permissions/add_project_creator_to_template", opt)
	if err != nil {
		return
	}
	resp, err = s.client.Do(req, nil)
	if err != nil {
		return
	}
	return
}
type PermissionsAddUserOption struct {
	Login      string `url:"login,omitempty"`       
	Permission string `url:"permission,omitempty"`  
	ProjectId  string `url:"projectId,omitempty"`   
	ProjectKey string `url:"projectKey,omitempty"`  
}
func (s *PermissionsService) AddUser(opt *PermissionsAddUserOption) (resp *http.Response, err error) {
	err = s.ValidateAddUserOpt(opt)
	if err != nil {
		return
	}
	req, err := s.client.NewRequest("POST", "permissions/add_user", opt)
	if err != nil {
		return
	}
	resp, err = s.client.Do(req, nil)
	if err != nil {
		return
	}
	return
}
type PermissionsAddUserToTemplateOption struct {
	Login        string `url:"login,omitempty"`         
	Permission   string `url:"permission,omitempty"`    
	TemplateId   string `url:"templateId,omitempty"`    
	TemplateName string `url:"templateName,omitempty"`  
}
func (s *PermissionsService) AddUserToTemplate(opt *PermissionsAddUserToTemplateOption) (resp *http.Response, err error) {
	err = s.ValidateAddUserToTemplateOpt(opt)
	if err != nil {
		return
	}
	req, err := s.client.NewRequest("POST", "permissions/add_user_to_template", opt)
	if err != nil {
		return
	}
	resp, err = s.client.Do(req, nil)
	if err != nil {
		return
	}
	return
}
type PermissionsApplyTemplateOption struct {
	ProjectId    string `url:"projectId,omitempty"`     
	ProjectKey   string `url:"projectKey,omitempty"`    
	TemplateId   string `url:"templateId,omitempty"`    
	TemplateName string `url:"templateName,omitempty"`  
}
func (s *PermissionsService) ApplyTemplate(opt *PermissionsApplyTemplateOption) (resp *http.Response, err error) {
	err = s.ValidateApplyTemplateOpt(opt)
	if err != nil {
		return
	}
	req, err := s.client.NewRequest("POST", "permissions/apply_template", opt)
	if err != nil {
		return
	}
	resp, err = s.client.Do(req, nil)
	if err != nil {
		return
	}
	return
}
type PermissionsBulkApplyTemplateOption struct {
	AnalyzedBefore    string `url:"analyzedBefore,omitempty"`     
	OnProvisionedOnly string `url:"onProvisionedOnly,omitempty"`  
	Projects          string `url:"projects,omitempty"`           
	Q                 string `url:"q,omitempty"`                  
	Qualifiers        string `url:"qualifiers,omitempty"`         
	TemplateId        string `url:"templateId,omitempty"`         
	TemplateName      string `url:"templateName,omitempty"`       
}
func (s *PermissionsService) BulkApplyTemplate(opt *PermissionsBulkApplyTemplateOption) (resp *http.Response, err error) {
	err = s.ValidateBulkApplyTemplateOpt(opt)
	if err != nil {
		return
	}
	req, err := s.client.NewRequest("POST", "permissions/bulk_apply_template", opt)
	if err != nil {
		return
	}
	resp, err = s.client.Do(req, nil)
	if err != nil {
		return
	}
	return
}
type PermissionsCreateTemplateOption struct {
	Description       string `url:"description,omitempty"`        
	Name              string `url:"name,omitempty"`               
	ProjectKeyPattern string `url:"projectKeyPattern,omitempty"`  
}
func (s *PermissionsService) CreateTemplate(opt *PermissionsCreateTemplateOption) (v *PermissionsCreateTemplateObject, resp *http.Response, err error) {
	err = s.ValidateCreateTemplateOpt(opt)
	if err != nil {
		return
	}
	req, err := s.client.NewRequest("POST", "permissions/create_template", opt)
	if err != nil {
		return
	}
	v = new(PermissionsCreateTemplateObject)
	resp, err = s.client.Do(req, v)
	if err != nil {
		return nil, resp, err
	}
	return
}
type PermissionsDeleteTemplateOption struct {
	TemplateId   string `url:"templateId,omitempty"`    
	TemplateName string `url:"templateName,omitempty"`  
}