Compartilhar via


SemaphoreAccessRule Classe

Definição

Representa um conjunto de direitos de acesso permitidos ou negados para um usuário ou grupo. Essa classe não pode ser herdada.

public ref class SemaphoreAccessRule sealed : System::Security::AccessControl::AccessRule
public sealed class SemaphoreAccessRule : System.Security.AccessControl.AccessRule
[System.Security.SecurityCritical]
public sealed class SemaphoreAccessRule : System.Security.AccessControl.AccessRule
[System.Runtime.InteropServices.ComVisible(false)]
public sealed class SemaphoreAccessRule : System.Security.AccessControl.AccessRule
type SemaphoreAccessRule = class
    inherit AccessRule
[<System.Security.SecurityCritical>]
type SemaphoreAccessRule = class
    inherit AccessRule
[<System.Runtime.InteropServices.ComVisible(false)>]
type SemaphoreAccessRule = class
    inherit AccessRule
Public NotInheritable Class SemaphoreAccessRule
Inherits AccessRule
Herança
SemaphoreAccessRule
Atributos

Exemplos

O exemplo de código a seguir demonstra a separação entre Allow regras e Deny regras e mostra a combinação de direitos em regras compatíveis. O exemplo cria um SemaphoreSecurity objeto , adiciona regras que permitem e negam vários direitos para o usuário atual e exibe o par de regras resultante. Em seguida, o exemplo permite novos direitos para o usuário atual e exibe o resultado, mostrando que os novos direitos são mesclados com a regra existente Allow .

Observação

Este exemplo não anexa o objeto de segurança a um Semaphore objeto . Exemplos que anexam objetos de segurança podem ser encontrados em Semaphore.GetAccessControl e 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
 */
Imports System.Threading
Imports System.Security.AccessControl
Imports System.Security.Principal

Public Class Example

    Public Shared Sub Main()

        ' Create a string representing the current user.
        Dim user As String = Environment.UserDomainName _ 
            & "\" & Environment.UserName

        ' Create a security object that grants no access.
        Dim mSec As New SemaphoreSecurity()

        ' Add a rule that grants the current user the 
        ' right to enter or release the semaphore.
        Dim rule As New SemaphoreAccessRule(user, _
            SemaphoreRights.Synchronize _
            Or 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)

    End Sub 

    Private Shared Sub ShowSecurity(ByVal security As SemaphoreSecurity)
        Console.WriteLine(vbCrLf & "Current access rules:" & vbCrLf)

        For Each ar As SemaphoreAccessRule In _
            security.GetAccessRules(True, True, GetType(NTAccount))

            Console.WriteLine("        User: {0}", ar.IdentityReference)
            Console.WriteLine("        Type: {0}", ar.AccessControlType)
            Console.WriteLine("      Rights: {0}", ar.SemaphoreRights)
            Console.WriteLine()
        Next

    End Sub
End Class 

'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

Comentários

A SemaphoreAccessRule classe é uma de um conjunto de classes que o .NET Framework fornece para gerenciar a segurança de controle de acesso do Windows em semáforos do sistema nomeados. Para obter uma visão geral dessas classes e sua relação com as estruturas de controle de acesso subjacentes do Windows, consulte SemaphoreSecurity.

Observação

A segurança do controle de acesso do Windows é significativa apenas para semáforos de sistema nomeados. Se um Semaphore objeto representar um semáforo local, o controle de acesso será irrelevante.

Para obter uma lista das regras atualmente aplicadas a um semáforo nomeado, use o Semaphore.GetAccessControl método para obter um SemaphoreSecurity objeto e, em seguida, use seu GetAccessRules método para obter uma coleção de SemaphoreAccessRule objetos.

SemaphoreAccessRule Os objetos não mapeiam um para um com entradas de controle de acesso na DACL (lista de controle de acesso discricionário) subjacente. Quando você obtém o conjunto de todas as regras de acesso para um semáforo, o conjunto contém o número mínimo de regras atualmente necessárias para expressar todas as entradas de controle de acesso.

Observação

As entradas de controle de acesso subjacentes mudam conforme você aplica e remove regras. As informações nas regras são mescladas, se possível, para manter o menor número de entradas de controle de acesso. Portanto, quando você lê a lista atual de regras, ela pode não se parecer exatamente com a lista de todas as regras que você adicionou.

Use SemaphoreAccessRule objetos para especificar direitos de acesso para permitir ou negar a um usuário ou grupo. Um SemaphoreAccessRule objeto sempre representa acesso permitido ou acesso negado, nunca ambos.

Para aplicar uma regra a um semáforo do sistema nomeado, use o Semaphore.GetAccessControl método para obter o SemaphoreSecurity objeto . Modifique o SemaphoreSecurity objeto usando seus métodos para adicionar a regra e, em seguida, use o Semaphore.SetAccessControl método para reanexar o objeto de segurança.

Importante

As alterações feitas em um SemaphoreSecurity objeto não afetam os níveis de acesso do semáforo nomeado até que você chame o Semaphore.SetAccessControl método para atribuir o objeto de segurança alterado ao semáforo nomeado.

SemaphoreAccessRule os objetos são imutáveis. A segurança de um semáforo é modificada usando os métodos da SemaphoreSecurity classe para adicionar ou remover regras; conforme você faz isso, as entradas de controle de acesso subjacentes são modificadas.

Construtores

SemaphoreAccessRule(IdentityReference, SemaphoreRights, AccessControlType)

Inicializa uma nova instância da classe SemaphoreAccessRule, especificando o usuário ou grupo ao qual a regra se aplica, os direitos de acesso e se estes são permitidos ou negados.

SemaphoreAccessRule(String, SemaphoreRights, AccessControlType)

Inicializa uma nova instância da classe SemaphoreAccessRule, especificando o nome do usuário ou do grupo ao qual a regra se aplica, os direitos de acesso e se eles são permitidos ou negados.

Propriedades

AccessControlType

Obtém o valor de AccessControlType associado a esse objeto AccessRule.

(Herdado de AccessRule)
AccessMask

Obtém a máscara de acesso para essa regra.

(Herdado de AuthorizationRule)
IdentityReference

Obtém o IdentityReference ao qual essa regra se aplica.

(Herdado de AuthorizationRule)
InheritanceFlags

Obtém o valor de sinalizadores que determinam como a essa regra é herdada por objetos filhos.

(Herdado de AuthorizationRule)
IsInherited

Obtém um valor que indica se esta regra é definida explicitamente ou é herdada de um objeto de contêiner pai.

(Herdado de AuthorizationRule)
PropagationFlags

Obtém o valor dos sinalizadores de propagação, que determinam como a herança dessa regra é propagada a objetos filho. Esta propriedade é significativa somente quando o valor de enumeração InheritanceFlags não é None.

(Herdado de AuthorizationRule)
SemaphoreRights

Obtém os direitos permitidos ou negados pela regra de acesso.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Confira também