Files
threshold/internal/iam/group_member.go
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

134 lines
3.5 KiB
Go
Raw Normal View History

2020-07-10 19:01:23 -04:00
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
2023-02-02 17:15:17 -08:00
2020-07-10 19:01:23 -04:00
package iam
import (
"context"
2020-08-10 17:15:02 -04:00
"github.com/hashicorp/boundary/internal/db"
2020-11-05 16:54:03 -05:00
"github.com/hashicorp/boundary/internal/errors"
2020-08-10 17:15:02 -04:00
"github.com/hashicorp/boundary/internal/iam/store"
2020-07-10 19:01:23 -04:00
"google.golang.org/protobuf/proto"
)
2020-08-13 17:35:55 -04:00
// MemberType defines the possible membership types for groups. We don't surface
// this in the API as of yet as it's always user and we don't have plans for
// others currently.
type MemberType uint32
const (
UnknownMemberType MemberType = 0
UserMemberType MemberType = 1
)
func (m MemberType) String() string {
return [...]string{
"unknown",
"user",
}[m]
}
2020-07-10 19:01:23 -04:00
const (
groupMemberViewDefaultTableName = "iam_group_member"
groupMemberUserDefaultTable = "iam_group_member_user"
)
// GroupMember provides a common way to return members.
type GroupMember struct {
*store.GroupMemberView
tableName string `gorm:"-"`
}
// TableName provides an overridden gorm table name for group members.
func (v *GroupMember) TableName() string {
if v.tableName != "" {
return v.tableName
}
return groupMemberViewDefaultTableName
}
// SetTableName sets the table name for the resource. If the caller attempts to
// set the name to "" the name will be reset to the default name.
func (v *GroupMember) SetTableName(n string) {
switch n {
case "":
v.tableName = groupMemberViewDefaultTableName
default:
v.tableName = n
}
}
// GroupMemberUser is a group member that's a User
type GroupMemberUser struct {
*store.GroupMemberUser
tableName string `gorm:"-"`
}
2020-08-07 12:55:02 -04:00
// ensure that GroupMember implements the interfaces of: Cloneable, db.VetForWriter
var (
_ Cloneable = (*GroupMemberUser)(nil)
_ db.VetForWriter = (*GroupMemberUser)(nil)
)
2020-07-10 19:01:23 -04:00
// NewGroupMemberUser creates a new in memory user member of the group. No
// options are currently supported.
func NewGroupMemberUser(ctx context.Context, groupId, userId string, _ ...Option) (*GroupMemberUser, error) {
2020-12-23 11:00:00 -08:00
const op = "iam.NewGroupMemberUser"
2020-07-10 19:01:23 -04:00
if groupId == "" {
return nil, errors.New(ctx, errors.InvalidParameter, op, "missing group id")
2020-07-10 19:01:23 -04:00
}
if userId == "" {
return nil, errors.New(ctx, errors.InvalidParameter, op, "missing user id")
2020-07-10 19:01:23 -04:00
}
return &GroupMemberUser{
GroupMemberUser: &store.GroupMemberUser{
MemberId: userId,
GroupId: groupId,
},
}, nil
}
func allocGroupMember() GroupMemberUser {
return GroupMemberUser{
GroupMemberUser: &store.GroupMemberUser{},
}
}
// Clone creates a clone of the GroupMember
2022-10-25 18:29:38 -05:00
func (m *GroupMemberUser) Clone() any {
2020-07-10 19:01:23 -04:00
cp := proto.Clone(m.GroupMemberUser)
return &GroupMemberUser{
GroupMemberUser: cp.(*store.GroupMemberUser),
}
}
// VetForWrite implements db.VetForWrite() interface for group members.
func (m *GroupMemberUser) VetForWrite(ctx context.Context, r db.Reader, opType db.OpType, opt ...db.Option) error {
2020-12-23 11:00:00 -08:00
const op = "iam.(GroupMemberUser).VetForWrite"
2020-07-10 19:01:23 -04:00
if m.GroupId == "" {
return errors.New(ctx, errors.InvalidParameter, op, "missing group id")
2020-07-10 19:01:23 -04:00
}
if m.MemberId == "" {
return errors.New(ctx, errors.InvalidParameter, op, "missing member id")
2020-07-10 19:01:23 -04:00
}
return nil
}
// TableName returns the tablename to override the default gorm table name
func (m *GroupMemberUser) TableName() string {
if m.tableName != "" {
return m.tableName
}
return groupMemberUserDefaultTable
}
// SetTableName sets the tablename and satisfies the ReplayableMessage interface
func (m *GroupMemberUser) SetTableName(n string) {
switch n {
case "":
m.tableName = groupMemberUserDefaultTable
default:
m.tableName = n
}
}