Share via


SemaphoreAccessRule 建構函式

定義

初始化 SemaphoreAccessRule 類別的新執行個體。

多載

SemaphoreAccessRule(IdentityReference, SemaphoreRights, AccessControlType)

初始化 SemaphoreAccessRule 類別的新執行個體,指定套用此規則的使用者或群組、存取權限,以及允許還是拒絕指定的存取權限。

SemaphoreAccessRule(String, SemaphoreRights, AccessControlType)

初始化 SemaphoreAccessRule 類別的新執行個體,指定套用此規則的使用者或群組名稱、存取權限,以及允許還是拒絕指定的存取權限。

SemaphoreAccessRule(IdentityReference, SemaphoreRights, AccessControlType)

來源:
SemaphoreSecurity.cs
來源:
SemaphoreSecurity.cs
來源:
SemaphoreSecurity.cs
來源:
SemaphoreSecurity.cs

初始化 SemaphoreAccessRule 類別的新執行個體,指定套用此規則的使用者或群組、存取權限,以及允許還是拒絕指定的存取權限。

public:
 SemaphoreAccessRule(System::Security::Principal::IdentityReference ^ identity, System::Security::AccessControl::SemaphoreRights eventRights, System::Security::AccessControl::AccessControlType type);
public SemaphoreAccessRule (System.Security.Principal.IdentityReference identity, System.Security.AccessControl.SemaphoreRights eventRights, System.Security.AccessControl.AccessControlType type);
new System.Security.AccessControl.SemaphoreAccessRule : System.Security.Principal.IdentityReference * System.Security.AccessControl.SemaphoreRights * System.Security.AccessControl.AccessControlType -> System.Security.AccessControl.SemaphoreAccessRule
Public Sub New (identity As IdentityReference, eventRights As SemaphoreRights, type As AccessControlType)

參數

identity
IdentityReference

適用這項規則的使用者或群組。 必須是型別 SecurityIdentifier,或是像是可以轉換成型別 NTAccountSecurityIdentifier 的型別。

eventRights
SemaphoreRights

SemaphoreRights 值的位元組合,指定允許或拒絕的權限。

type
AccessControlType

其中一個 AccessControlType 值,指定允許還是拒絕權限。

例外狀況

eventRights 指定了無效的值。

-或-

type 指定了無效的值。

identitynull

-或-

eventRights 為零。

identity 既不是 SecurityIdentifier 型別,也不是可以轉換成 NTAccount 型別的型別 (例如 SecurityIdentifier)。

備註

若要輸入 Semaphore,例如呼叫 WaitOne 方法,用戶必須具有 SemaphoreRights.Synchronize 存取權。 若要結束號誌,請呼叫 Release 方法,用戶必須具有 SemaphoreRights.Modify 存取權。

適用於

SemaphoreAccessRule(String, SemaphoreRights, AccessControlType)

來源:
SemaphoreSecurity.cs
來源:
SemaphoreSecurity.cs
來源:
SemaphoreSecurity.cs
來源:
SemaphoreSecurity.cs

初始化 SemaphoreAccessRule 類別的新執行個體,指定套用此規則的使用者或群組名稱、存取權限,以及允許還是拒絕指定的存取權限。

public:
 SemaphoreAccessRule(System::String ^ identity, System::Security::AccessControl::SemaphoreRights eventRights, System::Security::AccessControl::AccessControlType type);
public SemaphoreAccessRule (string identity, System.Security.AccessControl.SemaphoreRights eventRights, System.Security.AccessControl.AccessControlType type);
new System.Security.AccessControl.SemaphoreAccessRule : string * System.Security.AccessControl.SemaphoreRights * System.Security.AccessControl.AccessControlType -> System.Security.AccessControl.SemaphoreAccessRule
Public Sub New (identity As String, eventRights As SemaphoreRights, type As AccessControlType)

參數

identity
String

套用這個規則的使用者或群組名稱。

eventRights
SemaphoreRights

SemaphoreRights 值的位元組合,指定允許或拒絕的權限。

type
AccessControlType

其中一個 AccessControlType 值,指定允許還是拒絕權限。

例外狀況

eventRights 指定了無效的值。

-或-

type 指定了無效的值。

eventRights 為零。

identitynull

-或-

identity 是零長度字串

-或-

identity 的長度超過 512 個字元。

範例

下列程式代碼範例示範如何使用這個建構函式來建立 SemaphoreAccessRule 物件。 此範例會 SemaphoreSecurity 建立 物件、新增允許和拒絕目前使用者各種許可權的規則,並顯示產生的規則組。 此範例接著會允許目前使用者的新許可權,並顯示結果,顯示新許可權會與現有 Allow 規則合併。

注意

這個範例不會將安全性物件附加至 Semaphore 物件。 您可以在和 Semaphore.SetAccessControl中找到Semaphore.GetAccessControl附加安全性物件的範例。

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

備註

若要輸入 Semaphore,例如呼叫 WaitOne 方法,用戶必須具有 SemaphoreRights.Synchronize 存取權。 若要結束號誌,請呼叫 Release 方法,用戶必須具有 SemaphoreRights.Modify 存取權。

這個建構函式相當於建立 NTAccount 物件,方法是傳遞 identityNTAccount.NTAccount(String) 建構函式,並將新建立 NTAccount 的對象傳遞至建 SemaphoreAccessRule(IdentityReference, SemaphoreRights, AccessControlType) 構函式。

適用於