كيفية التحقق مما إذا كان مستخدم معين عضوًا في مجموعة المسؤولين المضمنة؟
سؤال
أحتاج إلى التحقق برمجيًا (في .NET) مما إذا كان مستخدم معين (حساب المجال) عضوًا في مجموعة المسؤولين المضمنة على جهاز الكمبيوتر الحالي (الجهاز الذي يتم تنفيذ التطبيق فيه).
هل هو ممكن؟
المحلول
لا أعرف شيئًا عن .Net، ولكن في نظام Win32، الطريقة السهلة هي الاتصال بـ IsUserAnAdmin().إذا كنت بحاجة إلى مزيد من التحكم، يمكنك فتح الرمز المميز للعملية والتحقق من خلال CheckTokenMembership لكل مجموعة تحتاج إلى التحقق منها
يحرر: يرى pinvoc.net للحصول على نموذج التعليمات البرمجية لـ .NET (شكرًا لك تشوبين)
نصائح أخرى
توجد واجهة برمجة تطبيقات Win32 لهذا يمكنك P/استدعاءها: IsUserAnAdmin
السؤال أكثر تعقيدًا في نظام التشغيل Vista ...انظر الى هذا مشاركة مدونة.
يمكنك تكرار المجموعات كما فعلت في هذه الإجابة:
تحديد أعضاء المجموعات المحلية عبر C#
بعد قراءة المزيد، سيكون أسهل شيء هو استخدام System.DirectoryServices.AccountManagement
مساحة الاسم.وهنا كيف يمكن استخدامه:
http://www.leastprivilege.com/SystemDirectoryServicesAccountManagement.aspx
عينة:
public static bool IsUserInGroup(string username, string groupname, ContextType type)
{
PrincipalContext context = new PrincipalContext(type);
UserPrincipal user = UserPrincipal.FindByIdentity(
context,
IdentityType.SamAccountName,
username);
GroupPrincipal group = GroupPrincipal.FindByIdentity(
context, groupname);
return user.IsMemberOf(group);
}
إذا كنت تتحدث عن المستخدم قيد التشغيل حاليًا
using System.Security.Principal;
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal wp = new WindowsPrincipal(identity);
if (wp.IsInRole("BUILTIN\Administrators"))
// Is Administrator
else
// Is Not
إذا لم يكن ثم أتوقع أنه من الممكن تعيين هوية لمستخدم معين ولكن لم يتم النظر في كيفية القيام بذلك.