كيف يمكنني تحديد ما إذا كان لدي امتيازات الكتابة برمجياً باستخدام C# في .Net؟

StackOverflow https://stackoverflow.com/questions/137031

سؤال

كيف يمكنني تحديد ما إذا كان لدي إذن الكتابة على جهاز بعيد في الإنترانت الخاصة بي باستخدام 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top