Verzeichnisse Berechtigung weitergeben

06/10/2007 - 07:28 von Judith Schmidt | Report spam
Hallo Gruppe,
ich probier es einfach nochmal. Nicht böse sein, aber leider suche ich schon
eine Weile ohne Erfolg.
Ich möchte die Berechtiungen eines Ordners an alle Unterordner weitergeben.
Das ist in den erweiterten Verzeichnisberechtiungen der Haken:
"Berechtigungen für alle untergeordnete Objekte durch.die angezeigten
Eintràge, sofern anwendbar ersetzen<<

Mit den Access Rules kann ich leider nur Berechtiungen an die Ordner
weitergeben bei denen der Haken zur Erbung von übergeordneten Objekten
gesetzt ist.

Ich kann die InheritanceFlags und PropagationFlags in der
FileSystemAccessRule setzen wie ich will. Die Berechtigung wird nicht an
Ordnern weitergegeben wo der Haken "...übergeordneter Objekte auf
untergeordnete Objekte .."deaktiviert ist.

Folgender Code funktioniert. Aber eben mit den Einschrànkungen die ich oben
schilderte:


//#######Anfang###########
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.AccessControl;
using System.Security.Principal;
using System.IO;

namespace ConsoleApplication1
{
class Program
{

static public void AddReadExecuteToDirectory(string directory,
NTAccount principle)
{
#region input validation

if (string.IsNullOrEmpty(directory))
{
throw new ArgumentNullException("directory");
}
if (principle == null)
{
throw new ArgumentNullException("principle");
}

#endregion

bool result;
string dir = directory.TrimEnd('\\');
DirectoryInfo info = new DirectoryInfo(dir);

FileSystemRights rights FileSystemRights.ReadAndExecute
| FileSystemRights.Traverse
| FileSystemRights.ListDirectory;

// First set access for the directory itself.

FileSystemAccessRule rule1 = new FileSystemAccessRule(
principle, rights,
//InheritanceFlags.None,
InheritanceFlags.ContainerInherit,
//PropagationFlags.NoPropagateInherit,
PropagationFlags.None,
AccessControlType.Allow);

DirectorySecurity security = info.GetAccessControl

(AccessControlSections.Access);
security.ModifyAccessRule
(AccessControlModification.Set,
rule1,
out result);
if (!result)
{
Console.WriteLine(
"Unable to add access rule to directory,"
+ directory + ", for " + principle.Value);
}

// Set up the inheritance rule.

FileSystemAccessRule rule2 = new FileSystemAccessRule(
principle, rights,
InheritanceFlags.ContainerInherit |
InheritanceFlags.ObjectInherit,
PropagationFlags.InheritOnly,
//PropagationFlags.None,
AccessControlType.Allow);

security.ModifyAccessRule(AccessControlModification.Add, rule2,
out
result);
if (!result)
{
Console.WriteLine(
"Unable to add inheritance rule to directory,"
+ directory + ", for " + principle.Value);
}

info.SetAccessControl(security);
}




static void Main(string[] args)
{
string param1;
NTAccount param2 = new NTAccount("testadmin");
param1 = "d:\\temp\\test";
AddReadExecuteToDirectory(param1, param2);
}
}

//########Ende##########
 

Lesen sie die antworten

#1 Thomas Scheidegger
06/10/2007 - 10:12 | Warnen spam
Hallo Judith

Ich kann die InheritanceFlags und PropagationFlags in der
FileSystemAccessRule setzen wie ich will. Die Berechtigung wird nicht


an
Ordnern weitergegeben wo der Haken "...übergeordneter Objekte auf
untergeordnete Objekte .."deaktiviert ist.




evtl. geht es da um
SetAccessRuleProtection
http://msdn2.microsoft.com/en-us/li...ction.aspx
lies dort auch 'Community Content'

Bsp
http://blog.crowe.co.nz/archive/200...-File.aspx


für weiteres wohl besser in spezifischer NG (engl.)
microsoft.public.dotnet.security



Thomas Scheidegger - 'NETMaster'
http://www.cetus-links.org/oo_dotnet.html - http://dnetmaster.net/

Ähnliche fragen