none
如何得知目前使用者群組 RRS feed

  • 問題

  •  

    如何得知目前使用者群組?

    嘗試使用

    System.Security.Principal.WindowsIdentity.GetCurrent.Groups(0)

    但只傳回群組ID,那麼如何可以對比使用者的群組是否為Administrators群組呢?

    2008年7月4日 下午 04:12

解答

所有回覆

  • 可以用 WindowsPrincipal.IsInRole() 來判斷。

     

    2008年7月5日 上午 07:34
    版主
  • HI,

     

    您可以在程式一開始就執行:

     

    AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

     

    然後再利用以下的語法判斷使用者的群組:

     

     if (System.Threading.Thread.CurrentPrincipal.IsInRole("Administrators"))
     {
     }

     

    tihs

    2008年7月6日 上午 01:10
  • 群組名稱是可以隨便改的,Administrators這種內建群組還是認SID才是正途。

    你可以用原本的程式碼列舉所有所屬群組的SID然後跟Administrators群組SID比對即可得知。

    Well-known security identifiers in Windows operating systems

    2008年7月7日 下午 02:44
  • 這會搞的更複雜吧 ...

     

    WindowsPrincipal.IsInRole() 可以傳入 WindowsBulitInRole 列舉的值。

    再者,不是每個使用者都在 Administrators 吧...

    2008年7月7日 下午 02:59
    版主
  • 哈,我沒注意到IsInRole有WindowsBulitInRole可以用。

    不過重點一樣啦,我認為對於內建群組用SID比用群組名稱比較好。

    不是固定的東西少用,才不會做出像我好幾年前遇到的一個要求一定要Administrator這個帳號才能安裝的軟體,用其它Administrators中的帳號不給裝,用Administrator更名後的帳號也不給裝。

    2008年7月7日 下午 03:08
  • 除非 Windows 安裝時有給預設的 Administrator SID,否則這個功能做不出來吧。

    而且是要 "保證" 每一台電腦所安裝的 Administrator 都是同一個 SID。

     

    2008年7月8日 上午 04:30
    版主
  • 請參考我文中的KB文章...
    2008年7月8日 上午 04:32
  • 你說的是這個吧:

     

    SID: S-1-5-domain-500
    Name: Administrator
    Description: A user account for the system administrator. By default, it is the only user account that is given full control over the system.

     

    但文章中還是沒說 "保證" SID 都一樣啊(意指全部都一樣),只能夠驗證前三碼 [S-1-5] 和最後一碼 [500] 而已 ...
    如果這些部份一定都是代表 Administrator,那就可以做的到了。

    2008年7月8日 上午 04:46
    版主
  • domain的部分就是每台電腦不同的地方,判斷domain之外的地方即可得知是哪個內建帳號/群組。

    2008年7月8日 上午 04:57