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.
128 lines
5.5 KiB
128 lines
5.5 KiB
//
|
|
// DISCLAIMER
|
|
//
|
|
// Copyright 2017 ArangoDB GmbH, Cologne, Germany
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
|
//
|
|
// Author Ewout Prangsma
|
|
//
|
|
|
|
package driver
|
|
|
|
import "context"
|
|
|
|
// User provides access to a single user of a single server / cluster of servers.
|
|
type User interface {
|
|
// Name returns the name of the user.
|
|
Name() string
|
|
|
|
// Is this an active user?
|
|
IsActive() bool
|
|
|
|
// Is a password change for this user needed?
|
|
IsPasswordChangeNeeded() bool
|
|
|
|
// Get extra information about this user that was passed during its creation/update/replacement
|
|
Extra(result interface{}) error
|
|
|
|
// Remove removes the user.
|
|
// If the user does not exist, a NotFoundError is returned.
|
|
Remove(ctx context.Context) error
|
|
|
|
// Update updates individual properties of the user.
|
|
// If the user does not exist, a NotFoundError is returned.
|
|
Update(ctx context.Context, options UserOptions) error
|
|
|
|
// Replace replaces all properties of the user.
|
|
// If the user does not exist, a NotFoundError is returned.
|
|
Replace(ctx context.Context, options UserOptions) error
|
|
|
|
// AccessibleDatabases returns a list of all databases that can be accessed (read/write or read-only) by this user.
|
|
AccessibleDatabases(ctx context.Context) ([]Database, error)
|
|
|
|
// SetDatabaseAccess sets the access this user has to the given database.
|
|
// Pass a `nil` database to set the default access this user has to any new database.
|
|
// This function requires ArangoDB 3.2 and up for access value `GrantReadOnly`.
|
|
SetDatabaseAccess(ctx context.Context, db Database, access Grant) error
|
|
|
|
// GetDatabaseAccess gets the access rights for this user to the given database.
|
|
// Pass a `nil` database to get the default access this user has to any new database.
|
|
// This function requires ArangoDB 3.2 and up.
|
|
// By default this function returns the "effective" grant.
|
|
// To return the "configured" grant, pass a context configured with `WithConfigured`.
|
|
// This distinction is only relevant in ArangoDB 3.3 in the context of a readonly database.
|
|
GetDatabaseAccess(ctx context.Context, db Database) (Grant, error)
|
|
|
|
// RemoveDatabaseAccess removes the access this user has to the given database.
|
|
// As a result the users access falls back to its default access.
|
|
// If you remove default access (db==`nil`) for a user (and there are no specific access
|
|
// rules for a database), the user's access falls back to no-access.
|
|
// Pass a `nil` database to set the default access this user has to any new database.
|
|
// This function requires ArangoDB 3.2 and up.
|
|
RemoveDatabaseAccess(ctx context.Context, db Database) error
|
|
|
|
// SetCollectionAccess sets the access this user has to a collection.
|
|
// If you pass a `Collection`, it will set access for that collection.
|
|
// If you pass a `Database`, it will set the default collection access for that database.
|
|
// If you pass `nil`, it will set the default collection access for the default database.
|
|
// This function requires ArangoDB 3.2 and up.
|
|
SetCollectionAccess(ctx context.Context, col AccessTarget, access Grant) error
|
|
|
|
// GetCollectionAccess gets the access rights for this user to the given collection.
|
|
// If you pass a `Collection`, it will get access for that collection.
|
|
// If you pass a `Database`, it will get the default collection access for that database.
|
|
// If you pass `nil`, it will get the default collection access for the default database.
|
|
// By default this function returns the "effective" grant.
|
|
// To return the "configured" grant, pass a context configured with `WithConfigured`.
|
|
// This distinction is only relevant in ArangoDB 3.3 in the context of a readonly database.
|
|
GetCollectionAccess(ctx context.Context, col AccessTarget) (Grant, error)
|
|
|
|
// RemoveCollectionAccess removes the access this user has to a collection.
|
|
// If you pass a `Collection`, it will removes access for that collection.
|
|
// If you pass a `Database`, it will removes the default collection access for that database.
|
|
// If you pass `nil`, it will removes the default collection access for the default database.
|
|
// This function requires ArangoDB 3.2 and up.
|
|
RemoveCollectionAccess(ctx context.Context, col AccessTarget) error
|
|
|
|
// GrantReadWriteAccess grants this user read/write access to the given database.
|
|
//
|
|
// Deprecated: use GrantDatabaseReadWriteAccess instead.
|
|
GrantReadWriteAccess(ctx context.Context, db Database) error
|
|
|
|
// RevokeAccess revokes this user access to the given database.
|
|
//
|
|
// Deprecated: use `SetDatabaseAccess(ctx, db, GrantNone)` instead.
|
|
RevokeAccess(ctx context.Context, db Database) error
|
|
}
|
|
|
|
// Grant specifies access rights for an object
|
|
type Grant string
|
|
|
|
const (
|
|
// GrantReadWrite indicates read/write access to an object
|
|
GrantReadWrite Grant = "rw"
|
|
// GrantReadOnly indicates read-only access to an object
|
|
GrantReadOnly Grant = "ro"
|
|
// GrantNone indicates no access to an object
|
|
GrantNone Grant = "none"
|
|
)
|
|
|
|
// AccessTarget is implemented by Database & Collection and it used to
|
|
// get/set/remove collection permissions.
|
|
type AccessTarget interface {
|
|
// Name returns the name of the database/collection.
|
|
Name() string
|
|
}
|
|
|