我做了一些示例代碼,檢查組的SID,正如Mike所建議的。您只需要將組的SID放在SecurityIdentifier
類的構造函數中,以針對當前登錄的用戶進行檢查。
Private Sub DoCheck()
Dim sid As New Security.Principal.SecurityIdentifier("S-0-0-00-0000000000-0000000000-0000000000-000"),
result As Boolean
result = IsUserInGroup(sid)
End Sub
Public Shared Function IsUserInGroup(sid As Security.Principal.SecurityIdentifier) As Boolean
Dim user As UserPrincipal
user = UserPrincipal.Current
For Each group As Principal In user.GetGroups()
If group.Sid.Equals(sid) Then Return True
Next
Return False
End Function
爲了讓你需要導入System.DirectoryServices.AccountManagement
工作代碼:
Imports System.DirectoryServices.AccountManagement
這個命名空間是位於微軟的System.DirectoryServices.AccountManagement.dll
這是可用,因爲.NET 4.0,我相信。
您如何檢查當前用戶現在是否是該組的成員?如果您正在使用AD查詢,則可以使用當前用戶的SID並驗證他們是否爲該組的成員。 – tHand
我正在使用方法[IsInRole(字符串)](http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.applicationservices.user.isinrole(v = vs.80).aspx) My.Application.User對象,使用我的問題中給出的字符串參數。通過使用具有域名稱的字符串,可以通過創建流氓域「輕鬆」僞造該字符串。檢查SID很有意思,它們不是真正的哈希或證書,但如果沒有安全的東西,那就這樣吧。 –
聽起來像雞/雞蛋問題。有.net函數來驗證用戶是他們說他們是誰,但通常涉及到要求他們輸入密碼。如果你不想提示他們,那麼你必須採取他們的話(在這種情況下,域)。這個應用程序是可移植的還是在一個組織內?如果它在一個組織內,則可以使用其他線索來嗅出不誠實的用戶。 – tHand