Pawan Kiran Ответов: 2

Права доступа к папке внутри сетевого общего диска?


Привет
У меня есть диск под названием Z: который присутствует в локальной сети, и он должен быть доступен для всех систем, подключенных в локальной сети.

Когда я создаю папку в Z:, я хочу установить разрешения (то есть) read, hidden и т. д...

Я создаю каталог с помощью System.IO.Directory.CreateDirectory() метод.

Я попробовал следующие методы установки разрешений, но они не сработали для сетевого диска.

public static void AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
{
    try
    {
       //http://msdn.microsoft.com/en-us/library/system.io.directory.setaccesscontrol.aspx
       // Create a new DirectoryInfoobject.
       DirectoryInfo dInfo = new DirectoryInfo(FileName);

       // Get a DirectorySecurity object that represents the
       // current security settings.
       DirectorySecurity dSecurity = dInfo.GetAccessControl();

       // Add the FileSystemAccessRule to the security settings.
       dSecurity.AddAccessRule(new FileSystemAccessRule(Account, Rights, ControlType));

       // Set the new access settings.
       dInfo.SetAccessControl(dSecurity);
    }
    catch (Exception e)
    {
       MessageBox.Show(e.Message.ToString());
    }
}

public static void RemoveDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
{
    // Create a new DirectoryInfo object.
    DirectoryInfo dInfo = new DirectoryInfo(FileName);

    // Get a DirectorySecurity object that represents the
    // current security settings.
    DirectorySecurity dSecurity = dInfo.GetAccessControl();

    // Add the FileSystemAccessRule to the security settings.
    dSecurity.RemoveAccessRule(new FileSystemAccessRule(Account, Rights, ControlType));

    // Set the new access settings.
    dInfo.SetAccessControl(dSecurity);

}



Как установить разрешения с помощью c# 3.0? Любая помощь будет оценена по достоинству.

Заранее спасибо,
Паван.

2 Ответов

Рейтинг:
1

DaveHerron

: смех: вот как я это делаю...

<br />
		public static bool SetFolderAccess(<br />
			string fullPath<br />
			, string userDomainName<br />
			, System.Security.AccessControl.FileSystemRights systemRights<br />
			, System.Security.AccessControl.InheritanceFlags inheritanceFlags<br />
			, System.Security.AccessControl.PropagationFlags propagationFlags<br />
			, System.Security.AccessControl.AccessControlType accessControlType<br />
			, out string statusMessage)<br />
		{<br />
			/*==============================================================================\<br />
			 * Description: called to set the access control to a folder ... see sample<br />
			 * Comment: User of app must have admin or folder owner set modify permissions<br />
			 * --------------------------------  Notes  ------------------------------------ <br />
			 * -----------------------------------------------------------------------------<br />
			 * Sample call:<br />
			 *		Security.AccessControl.SetFolderAccess(<br />
						appsFullPath //--- "C:\logs\C"<br />
						, userDomainName //--- ""<br />
						, System.Security.AccessControl.FileSystemRights.Modify<br />
						, System.Security.AccessControl.InheritanceFlags.ContainerInherit<br />
							| System.Security.AccessControl.InheritanceFlags.ObjectInherit<br />
						, System.Security.AccessControl.PropagationFlags.None<br />
						, System.Security.AccessControl.AccessControlType.Allow<br />
						, out statusMessage);<br />
			\==============================================================================*/<br />
<br />
			//--- declarations<br />
			bool returnSuccess = true;<br />
			System.Security.AccessControl.FileSystemAccessRule accessRule = null;<br />
			System.IO.DirectoryInfo directoryInfo = null;<br />
			System.Security.AccessControl.DirectorySecurity directorySecurity = null;<br />
<br />
			//--- initialize<br />
			statusMessage = "SUCCESS";<br />
			fullPath = MTC.Utils.RemoveSlashFromPath(fullPath);<br />
<br />
			try<br />
			{<br />
				if (System.IO.Directory.Exists(fullPath) == false)<br />
				{<br />
					statusMessage += "FAILED: Path cannot be empty.";<br />
					returnSuccess = false;<br />
					throw new Exception(statusMessage);<br />
				}<br />
<br />
				//--- Add Access Rule to the actual directory itself<br />
				accessRule =<br />
					new System.Security.AccessControl.FileSystemAccessRule(<br />
						userDomainName<br />
						, systemRights<br />
						, inheritanceFlags<br />
						, propagationFlags<br />
						, accessControlType);<br />
<br />
				directoryInfo =<br />
					new System.IO.DirectoryInfo(<br />
						fullPath);<br />
<br />
				directorySecurity =<br />
					directoryInfo.GetAccessControl(<br />
						System.Security.AccessControl.AccessControlSections.Access);<br />
<br />
				directorySecurity.ModifyAccessRule(<br />
					System.Security.AccessControl.AccessControlModification.Set<br />
					, accessRule<br />
					, out returnSuccess);<br />
<br />
				if (!returnSuccess)<br />
				{<br />
					statusMessage += "FAILED: Unable to modify the folder security";<br />
					throw new Exception(statusMessage);<br />
				}<br />
<br />
				directoryInfo.SetAccessControl(directorySecurity);<br />
			}<br />
<br />
			catch(Exception eo)<br />
			{<br />
				if (statusMessage.Length.Equals(0))<br />
				{<br />
					statusMessage = "FAILED: Unexpected error..Unable to modify the folder security";<br />
				}<br />
				returnSuccess = false;<br />
			}<br />
<br />
			return returnSuccess;<br />
		}<br />


Рейтинг:
0

Michel Godfroid

Находится ли ваша сетевая папка на общем ресурсе NTFS? Это не сработает, если это какой-то другой общий ресурс (например, потребительские устройства NAS) или даже большинство версий Samba.
Даже если ваш общий ресурс является NTFS, вы не можете установить разрешения на корень общего ресурса (они контролируются самим общим ресурсом, и разрешения довольно просты: чтение, Чтение/запись или отсутствие доступа.)
Вы можете установить разрешения только для подкаталогов и файлов ниже корня общего ресурса.