كيف يمكنني تحديد ما إذا كان لدي امتيازات الكتابة برمجياً باستخدام C# في .Net؟
-
02-07-2019 - |
سؤال
كيف يمكنني تحديد ما إذا كان لدي إذن الكتابة على جهاز بعيد في الإنترانت الخاصة بي باستخدام C# في .Net؟
المحلول
الجواب البسيط هو تجربتها ورؤيتها.واجهات برمجة تطبيقات أمان Windows ليست لضعاف القلوب، ومن الممكن أن يكون لديك إذن الكتابة دون الحصول على إذن لعرض الأذونات!
نصائح أخرى
لقد كنت هناك أيضًا، وكان الحل الأفضل والأكثر موثوقية الذي وجدته هو هذا:
bool hasWriteAccess = true;
string remoteFileName = "\\server\share\file.name"
try
{
createRemoteFile(remoteFileName);
}
catch (SystemSecurityException)
{
hasWriteAccess = false;
}
if (File.Exists(remoteFileName))
{
File.Delete(remoteFileName);
}
return hasWriteAccess;
تحقق من هذا المنتدى.
http://bytes.com/forum/thread389514.html
وهو يصف استخدام الكائنات الموجودة في System.Security.AccessControl مساحة الاسم للحصول على قائمة بأذونات ACL لملف ما.إنه متوفر فقط في .NET 2.0 والإصدارات الأحدث.أعتقد أنه يفترض أيضًا أن لديك شبكة SMB.لست متأكدًا مما ستفعله إذا كنت تستخدم شبكة لا تعمل بنظام Windows.
إذا لم تكن تستخدم .NET 2.0 أو أعلى، فهذا هو pInvoc المعتاد وWin32 API jazz.
يكتب ScottKoon حول التحقق من أذونات Windows ACL.يمكنك أيضًا التحقق من أذونات التعليمات البرمجية المُدارة باستخدام CAS (Code Access Security).هذه طريقة خاصة بـ .Net لتقييد الأذونات.لاحظ، إذا لم يكن لدى المستخدم أذونات الكتابة، فلن يحصل الكود أبدًا على أذونات الكتابة (حتى لو قالت CAS أنها تمتلك ذلك) - الأذونات الأكثر تقييدًا بين الاثنين هي التي تفوز.
إن CAS سهل الاستخدام جدًا - يمكنك أيضًا إضافة سمات تعريفية عند بداية طرقك.يمكنك قراءة المزيد على MSDN