58 lines
1.8 KiB
Go
58 lines
1.8 KiB
Go
package serializationimp
|
|
|
|
import (
|
|
"github.com/tech/sendico/pkg/merrors"
|
|
"github.com/tech/sendico/pkg/model"
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
)
|
|
|
|
// RoleSerializer implements CasbinSerializer for Role.
|
|
type RoleSerializer struct{}
|
|
|
|
// Serialize converts a Role object into a Casbin grouping policy.
|
|
func (s *RoleSerializer) Serialize(entity *model.Role) ([]any, error) {
|
|
// Validate required fields
|
|
if entity.AccountRef.IsZero() || entity.DescriptionRef.IsZero() || entity.OrganizationRef.IsZero() {
|
|
return nil, merrors.InvalidArgument("role contains invalid object references")
|
|
}
|
|
|
|
return []any{
|
|
entity.AccountRef.Hex(), // Maps to g(_, _, _) accountRef
|
|
entity.DescriptionRef.Hex(), // Maps to g(_, _, _) roleRef
|
|
entity.OrganizationRef.Hex(), // Maps to g(_, _, _) organizationRef
|
|
}, nil
|
|
}
|
|
|
|
// Deserialize converts a Casbin grouping policy into a Role object.
|
|
func (s *RoleSerializer) Deserialize(policy []string) (*model.Role, error) {
|
|
// Ensure the policy has exactly 3 fields
|
|
if len(policy) != 3 {
|
|
return nil, merrors.Internal("invalid grouping policy format")
|
|
}
|
|
|
|
// Parse accountRef
|
|
accountRef, err := primitive.ObjectIDFromHex(policy[0])
|
|
if err != nil {
|
|
return nil, merrors.InvalidArgument("invalid accountRef in grouping policy")
|
|
}
|
|
|
|
// Parse roleDescriptionRef (roleRef)
|
|
roleDescriptionRef, err := primitive.ObjectIDFromHex(policy[1])
|
|
if err != nil {
|
|
return nil, merrors.InvalidArgument("invalid roleRef in grouping policy")
|
|
}
|
|
|
|
// Parse organizationRef
|
|
organizationRef, err := primitive.ObjectIDFromHex(policy[2])
|
|
if err != nil {
|
|
return nil, merrors.InvalidArgument("invalid organizationRef in grouping policy")
|
|
}
|
|
|
|
// Return the constructed Role object
|
|
return &model.Role{
|
|
AccountRef: accountRef,
|
|
DescriptionRef: roleDescriptionRef,
|
|
OrganizationRef: organizationRef,
|
|
}, nil
|
|
}
|