// Copyright (c) Mainflux // SPDX-License-Identifier: Apache-2.0 package policies import "github.com/mainflux/mainflux/internal/apiutil" // Action represents an enum for the policies used in the Mainflux. type Action int const ( Create Action = iota Read Write Delete Access Member Unknown ) var actions = map[string]Action{ "create": Create, "read": Read, "write": Write, "delete": Delete, "access": Access, "member": Member, } type policiesReq struct { token string SubjectIDs []string `json:"subjects"` Policies []string `json:"policies"` Object string `json:"object"` } func (req policiesReq) validate() error { if req.token == "" { return apiutil.ErrBearerToken } if len(req.SubjectIDs) == 0 { return apiutil.ErrEmptyList } if len(req.Policies) == 0 { return apiutil.ErrEmptyList } if req.Object == "" { return apiutil.ErrMissingPolicyObj } for _, policy := range req.Policies { if _, ok := actions[policy]; !ok { return apiutil.ErrMalformedPolicy } } for _, subID := range req.SubjectIDs { if subID == "" { return apiutil.ErrMissingPolicySub } } return nil }