SemaphoreSecurity.AddAccessRule(SemaphoreAccessRule) Metoda

Definice

Vyhledá odpovídající pravidlo, se kterým je možné nové pravidlo sloučit. Pokud se žádné nenajde, přidá nové pravidlo.

public void AddAccessRule(System.Security.AccessControl.SemaphoreAccessRule rule);

Parametry

rule
SemaphoreAccessRule

Pravidlo řízení přístupu, které chcete přidat.

Výjimky

rule je null.

Příklady

Následující příklad kódu ukazuje oddělení mezi Allow pravidly a Deny pravidly a ukazuje kombinaci práv v kompatibilních pravidlech. Příklad vytvoří SemaphoreSecurity objekt, přidá pravidla, která povolují a zamítnou různá práva pro aktuálního uživatele, a zobrazí výslednou dvojici pravidel. Příklad pak povolí nová práva pro aktuálního uživatele a zobrazí výsledek, který ukazuje, že nová práva jsou sloučena s existujícím Allow pravidlem.

Poznámka

Tento příklad nepřipojí objekt zabezpečení k objektu Semaphore . Příklady, které připojují objekty zabezpečení, najdete v Semaphore.GetAccessControl a Semaphore.SetAccessControl.

using System;
using System.Threading;
using System.Security.AccessControl;
using System.Security.Principal;

public class Example
{
    public static void Main()
    {
        // Create a string representing the current user.
        string user = Environment.UserDomainName + "\\" + 
            Environment.UserName;

        // Create a security object that grants no access.
        SemaphoreSecurity mSec = new SemaphoreSecurity();

        // Add a rule that grants the current user the 
        // right to enter or release the semaphore.
        SemaphoreAccessRule rule = new SemaphoreAccessRule(user, 
            SemaphoreRights.Synchronize | SemaphoreRights.Modify, 
            AccessControlType.Allow);
        mSec.AddAccessRule(rule);

        // Add a rule that denies the current user the 
        // right to change permissions on the semaphore.
        rule = new SemaphoreAccessRule(user, 
            SemaphoreRights.ChangePermissions, 
            AccessControlType.Deny);
        mSec.AddAccessRule(rule);

        // Display the rules in the security object.
        ShowSecurity(mSec);

        // Add a rule that allows the current user the 
        // right to read permissions on the semaphore. This rule
        // is merged with the existing Allow rule.
        rule = new SemaphoreAccessRule(user, 
            SemaphoreRights.ReadPermissions, 
            AccessControlType.Allow);
        mSec.AddAccessRule(rule);

        ShowSecurity(mSec);
    }

    private static void ShowSecurity(SemaphoreSecurity security)
    {
        Console.WriteLine("\r\nCurrent access rules:\r\n");

        foreach(SemaphoreAccessRule ar in 
            security.GetAccessRules(true, true, typeof(NTAccount)))
        {
            Console.WriteLine("        User: {0}", ar.IdentityReference);
            Console.WriteLine("        Type: {0}", ar.AccessControlType);
            Console.WriteLine("      Rights: {0}", ar.SemaphoreRights);
            Console.WriteLine();
        }
    }
}

/*This code example produces output similar to following:

Current access rules:

        User: TestDomain\TestUser
        Type: Deny
      Rights: ChangePermissions

        User: TestDomain\TestUser
        Type: Allow
      Rights: Modify, Synchronize


Current access rules:

        User: TestDomain\TestUser
        Type: Deny
      Rights: ChangePermissions

        User: TestDomain\TestUser
        Type: Allow
      Rights: Modify, ReadPermissions, Synchronize
 */

Poznámky

Metoda AddAccessRule vyhledá pravidla se stejným uživatelem nebo skupinou a stejnou AccessControlType jako rule. Pokud se žádná nenajde, rule přidá se . Pokud se najde odpovídající pravidlo, práva v rule souboru se sloučí s existujícím pravidlem.

Platí pro

Produkt Verze
.NET Core 1.0, Core 1.1, 8 (package-provided), 9 (package-provided), 10 (package-provided)
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided)
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10