неправильно работает Directory.SetAccessControl
От: pumpurumer  
Дата: 13.09.09 13:26
Оценка:
Собсвенно код:

    public class StaticMembers
    {
        private static FileSystemAccessRule _everyOneAccaunt;

        public static FileSystemAccessRule EveryOneAccaunt
        {
            get
            {
                if(_everyOneAccaunt == null)
                {
                    string account = new SecurityIdentifier("S-1-1-0").Translate(typeof(NTAccount)).ToString();
                    _everyOneAccaunt = new FileSystemAccessRule(account, FileSystemRights.FullControl, AccessControlType.Allow);
                }
                return _everyOneAccaunt;
            }
        }

        public static void SetAllAccessToObject(string path,ILog log)
        {
            try
            {
                if (File.Exists(path))
                {
                    FileSecurity fsec = new FileSecurity(path, AccessControlSections.All);
                    fsec.AddAccessRule(EveryOneAccaunt);
                    File.SetAccessControl(path, fsec);
                    return;
                }
                if (Directory.Exists(path))
                {
                    DirectorySecurity fsec = new DirectorySecurity(path, AccessControlSections.All);
                    fsec.AddAccessRule(EveryOneAccaunt);
                    Directory.SetAccessControl(path, fsec);
                    return;
                }
            }
            catch (Exception ex)
            {
                log.Error("Ошибка смены прав", ex);
            }
        }
    }

если использовать оное на директорию, то во вкладке безопасность появляется нужный акаунт (Все), только у него нету никаких прав. это фича или баг?
Re: неправильно работает Directory.SetAccessControl
От: MozgC США http://nightcoder.livejournal.com
Дата: 13.09.09 14:06
Оценка: +1
Может переименуете EveryOneAccaunt в EveryOneAccount? а то прямо глаз режет.
Re[2]: неправильно работает Directory.SetAccessControl
От: pumpurumer  
Дата: 13.09.09 18:28
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>Может переименуете EveryOneAccaunt в EveryOneAccount? а то прямо глаз режет.


А по сути вопроса чтонибуть есть?
Re: неправильно работает Directory.SetAccessControl
От: x64 Россия http://x64blog.name
Дата: 13.09.09 18:41
Оценка: 5 (1)
void
AllowAccessToEveryone (

    string DirectoryPath)

{
    //
    // Создаём SID, для которого указываем разрешения. В данном
    // случае это SID, обозначающий любого пользователя или группу.
    //

    SecurityIdentifier Sid = new SecurityIdentifier (
        WellKnownSidType.WorldSid,
        null);

    //
    // Создаём ACE, разрешающий полный доступ любому пользователю или
    // группе. Одновременно указываем, что данные разрешения должны быть
    // применены ко всем объектам внутри того объекта, к которому будут
    // применены.
    //
            
    FileSystemAccessRule FsRule = new FileSystemAccessRule (
        Sid,
        FileSystemRights.FullControl,
        InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,
        PropagationFlags.None,
        AccessControlType.Allow);

    //
    // Создаём дескриптор безопасности, содержащий ACL, а также параметры
    // наследования разрешений родительского объекта.
    //

    DirectorySecurity DirSec = new DirectorySecurity ();

    //
    // Запрещаем наследование каких-либо родительских разрешений, таким
    // образом в список разрешений не будут добавлены разрешения назначенные
    // каким-либо родительским объектам.
    //

    DirSec.SetAccessRuleProtection (true, false);

    //
    // Добавляем созданное ранее разрешение в ACL.
    //

    DirSec.SetAccessRule (FsRule);

    //
    // Устанавливаем разрешения для нужной нам папки. При этом будут
    // удалены все установленные ранее разрешения и сброшены все флаги
    // наследования.
    //

    Directory.SetAccessControl (DirectoryPath, DirSec);
}
JID: x64j@jabber.ru
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.