/* ========================================================================
* Copyright (c) 2005-2026 The OPC Foundation, Inc. All rights reserved.
*
* OPC Foundation MIT License 1.00
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* The complete license agreement can be found here:
* http://opcfoundation.org/License/MIT/1.00/
* ======================================================================*/
using System.Collections.Generic;
using Opc.Ua.Server.UserDatabase;
namespace Opc.Ua.Gds.Server
{
///
/// Extends with GDS-specific user
/// properties required for the
/// privilege (OPC 10000-12 ยง7.2).
///
///
///
/// The base stores user credentials and
/// roles but has no concept of per-user application bindings. A GDS
/// that supports the ApplicationAdmin privilege needs to
/// know which ApplicationIds each user may administer.
///
///
/// Implement this interface (instead of plain
/// ) and pass it to
/// so that the
/// impersonation handler can populate
///
/// automatically.
///
///
///
/// public class MyGdsUserDatabase : LinqUserDatabase, IGdsUserDatabase
/// {
/// public IReadOnlyList<NodeId> GetAdministeredApplicationIds(string userName)
/// {
/// // look up the mapping from your persistent store
/// return _appAdminMap.TryGetValue(userName, out var ids) ? ids : null;
/// }
/// }
///
///
///
public interface IGdsUserDatabase : IUserDatabase
{
///
/// Returns the set of ApplicationIds the specified user
/// is allowed to administer, or null / empty when the
/// user does not hold the
/// privilege.
///
/// The user name.
///
/// A list of s representing the registered
/// applications the user may administer, or null.
///
IReadOnlyList? GetAdministeredApplicationIds(string userName);
}
}