You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.9 KiB
77 lines
1.9 KiB
package memory
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/credential"
|
|
)
|
|
|
|
// GetPolicies retrieves all IAM policies from memory
|
|
func (store *MemoryStore) GetPolicies(ctx context.Context) (map[string]credential.PolicyDocument, error) {
|
|
store.mu.RLock()
|
|
defer store.mu.RUnlock()
|
|
|
|
if !store.initialized {
|
|
return nil, fmt.Errorf("store not initialized")
|
|
}
|
|
|
|
// Create a copy of the policies map to avoid mutation issues
|
|
policies := make(map[string]credential.PolicyDocument)
|
|
for name, doc := range store.policies {
|
|
policies[name] = doc
|
|
}
|
|
|
|
return policies, nil
|
|
}
|
|
|
|
// GetPolicy retrieves a specific IAM policy by name from memory
|
|
func (store *MemoryStore) GetPolicy(ctx context.Context, name string) (*credential.PolicyDocument, error) {
|
|
store.mu.RLock()
|
|
defer store.mu.RUnlock()
|
|
|
|
if policy, exists := store.policies[name]; exists {
|
|
return &policy, nil
|
|
}
|
|
|
|
return nil, nil // Policy not found
|
|
}
|
|
|
|
// CreatePolicy creates a new IAM policy in memory
|
|
func (store *MemoryStore) CreatePolicy(ctx context.Context, name string, document credential.PolicyDocument) error {
|
|
store.mu.Lock()
|
|
defer store.mu.Unlock()
|
|
|
|
if !store.initialized {
|
|
return fmt.Errorf("store not initialized")
|
|
}
|
|
|
|
store.policies[name] = document
|
|
return nil
|
|
}
|
|
|
|
// UpdatePolicy updates an existing IAM policy in memory
|
|
func (store *MemoryStore) UpdatePolicy(ctx context.Context, name string, document credential.PolicyDocument) error {
|
|
store.mu.Lock()
|
|
defer store.mu.Unlock()
|
|
|
|
if !store.initialized {
|
|
return fmt.Errorf("store not initialized")
|
|
}
|
|
|
|
store.policies[name] = document
|
|
return nil
|
|
}
|
|
|
|
// DeletePolicy deletes an IAM policy from memory
|
|
func (store *MemoryStore) DeletePolicy(ctx context.Context, name string) error {
|
|
store.mu.Lock()
|
|
defer store.mu.Unlock()
|
|
|
|
if !store.initialized {
|
|
return fmt.Errorf("store not initialized")
|
|
}
|
|
|
|
delete(store.policies, name)
|
|
return nil
|
|
}
|