C # Лучший способ обрабатывать разрешения UNIX от Visual Studio - PullRequest
0 голосов
/ 09 июня 2018

Привет, все, что я хотел, чтобы иметь возможность устанавливать разрешения для сокетов unix для проекта, который я разрабатываю, я не мог найти «хороший» способ сделать это, написав это небольшое пространство имен, оно кажется довольно эффективным, поэтому я решил опубликоватьздесь, посмотрите, что все, хотя, и если есть что-то, что я мог бы улучшить.

Также для публичных мест, если кто-то еще ищет что-то, чтобы сделать это:)

Вы можете использовать это решение, чтобы установитьправа доступа к файлам в файловой системе Unix, например:

UnixFileInfo UnixFilePermission = new Mono.Unix.UnixFileInfo(@"/somepath");
UnixFilePermission.FileAccessPermissions = new PermGrid().ConvertPerm(644);

А вот пространство имен само по себе

using System;
using Mono.Unix;
using UnixTools;

namespace UnixTools
{
    public class PermGrid
    {
        private static readonly FileAccessPermissions[,] PermissionGrid = new FileAccessPermissions[3, 8] {
            {
                0x00,
                FileAccessPermissions.UserExecute,
                FileAccessPermissions.UserRead,
                FileAccessPermissions.UserExecute | FileAccessPermissions.UserRead,
                FileAccessPermissions.UserWrite,
                FileAccessPermissions.UserWrite | FileAccessPermissions.UserExecute,
                FileAccessPermissions.UserWrite | FileAccessPermissions.UserRead,
                FileAccessPermissions.UserReadWriteExecute
            },
            {
                0x00,
                FileAccessPermissions.GroupExecute,
                FileAccessPermissions.GroupRead,
                FileAccessPermissions.GroupExecute | FileAccessPermissions.GroupRead,
                FileAccessPermissions.GroupWrite,
                FileAccessPermissions.GroupWrite | FileAccessPermissions.GroupExecute,
                FileAccessPermissions.GroupWrite | FileAccessPermissions.GroupRead,
                FileAccessPermissions.GroupReadWriteExecute
            },
            {
                0x00,
                FileAccessPermissions.OtherExecute,
                FileAccessPermissions.OtherRead,
                FileAccessPermissions.OtherExecute | FileAccessPermissions.OtherRead,
                FileAccessPermissions.OtherWrite,
                FileAccessPermissions.OtherWrite | FileAccessPermissions.OtherExecute,
                FileAccessPermissions.OtherWrite | FileAccessPermissions.OtherRead,
                FileAccessPermissions.OtherReadWriteExecute
            },
        };
        public FileAccessPermissions ConvertPerm(int UnixPerm)
        {
            return ConvertPerm(UnixPerm.ToString());
        }
        public FileAccessPermissions ConvertPerm(String UnixPerm)
        {
            Int16 PermissionSegment = 0;
            Int16[] PermissionSegmentGroup = new Int16[3] { 0, 0, 0 };

            foreach (Char PermInt in UnixPerm)
            {
                PermissionSegmentGroup[PermissionSegment] = Convert.ToInt16(PermInt.ToString());
                PermissionSegment++;
            }
            return ConvertPerm(PermissionSegmentGroup);
        }
        public FileAccessPermissions ConvertPerm(Int16[] UnixPerm)
        {
            FileAccessPermissions PermStore = new FileAccessPermissions();
            PermStore = PermissionGrid[0, UnixPerm[0]] | PermissionGrid[1, UnixPerm[1]] | PermissionGrid[2, UnixPerm[2]];

            return PermStore;
        }
    }
}
...