Connectivity Software User's Guide and Reference
INameAndPasswordUserManager Interface
Members  Example 



OpcLabs.BaseLib Assembly > OpcLabs.BaseLib.Security.User Namespace : INameAndPasswordUserManager Interface
Provides methods for managing users with names and passwords.
Syntax
'Declaration
 
<ExceptionContractAnnotationAttribute()>
<CLSCompliantAttribute(True)>
<ComVisibleAttribute(False)>
Public Interface INameAndPasswordUserManager 
   Inherits OpcLabs.BaseLib.Persistence.IStreamPersistable, IReadOnlyNameAndPasswordUserManager, IReadOnlyNameAndPasswordUserManager2 
'Usage
 
Dim instance As INameAndPasswordUserManager
[ExceptionContractAnnotation()]
[CLSCompliant(true)]
[ComVisible(false)]
public interface INameAndPasswordUserManager : OpcLabs.BaseLib.Persistence.IStreamPersistable, IReadOnlyNameAndPasswordUserManager, IReadOnlyNameAndPasswordUserManager2  
[ExceptionContractAnnotation()]
[CLSCompliant(true)]
[ComVisible(false)]
public interface class INameAndPasswordUserManager : public OpcLabs.BaseLib.Persistence.IStreamPersistable, IReadOnlyNameAndPasswordUserManager, IReadOnlyNameAndPasswordUserManager2  
Example
// This example shows how to create a user with username & password and assign it specific OPC UA security roles. 
// You can use any OPC UA client, including our Connectivity Explorer and OpcCmd utility, to connect to the server. 
//
// Find all latest examples here: https://www.doc-that.com/files/onlinedocs/OPCLabs-ConnectivityStudio/Latest/examples.html .
// OPC client, server and subscriber examples in C# on GitHub: https://github.com/OPCLabs/Examples-ConnectivityStudio-CSharp .
// Missing some example? Ask us for it on our Online Forums, https://forum.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.

using OpcLabs.BaseLib.Security.User.Extensions;
using OpcLabs.EasyOpc.UA;
using OpcLabs.EasyOpc.UA.NodeSpace;
using OpcLabs.EasyOpc.UA.Security.Subject;
using System;

namespace UAServerDocExamples.AccessControl
{
    internal class NameAndPasswordUserManager
    {
        public static void CreateWithSecurityRoleIds()
        {
            // Instantiate the server object.
            // By default, the server will run on endpoint URL "opc.tcp://localhost:48040/".
            var server = new EasyUAServer();

            // Clear the default security roles (Operator) for the Anonymous user.
            server.UserManagers.Anonymous.SecurityRoleIdSet.Clear();

            // Create a user with username "alpha" and password "pass". The user session will be assigned the Engineer and
            // Operator security roles, in addition to the implicit Anonymous, AuthenticatedUser and possibly
            // TrustedApplication roles.
            server.UserManagers.NameAndPassword.CreateWithSecurityRoleIds("alpha", "pass",
                new string[] {UASecurityRoles.Engineer, UASecurityRoles.Operator});

            // Create a data variable providing random integers.
            var random = new Random();
            var dataVariable = new UADataVariable("MyDataVariable").ReadValueFunction(() => random.Next());

            // Assign permissions to the data variable. In this case, only users with the Engineer security role will be able
            // to browse, read and write the variable.
            dataVariable.PermissionAssignment = new UAPermissionAssignment
            {
                new UARolePermissions(UASecurityRoles.Engineer, UAPermissions.ViewBasic | UAPermissions.ModifyBasic)
            };
            // We do not want to inherit permissions from the parent nodes, as they include viewing for TrustedApplication.
            dataVariable.PermissionsInheritanceType = UAPermissionsInheritanceType.None;

            // Add the data variable to the server's address space.
            server.Add(dataVariable);

            // Start the server.
            Console.WriteLine("The server is starting...");
            server.Start();

            Console.WriteLine("The server is started.");
            Console.WriteLine();

            // Let the user decide when to stop.
            Console.WriteLine("Press Enter to stop the server...");
            Console.ReadLine();

            // Stop the server.
            Console.WriteLine("The server is stopping...");
            server.Stop();

            Console.WriteLine("The server is stopped.");
        }
    }
}
Requirements

Target Platforms: .NET Framework: Windows 10 (selected versions), Windows 11 (selected versions), Windows Server 2016, Windows Server 2022; .NET: Linux, macOS, Microsoft Windows

See Also