private void okButton_Click(object sender, EventArgs e) { Attributes attributes = new Attributes(); attributes.readOnly = readOnlyCheckBox.Checked; attributes.hidden = hiddenCheckBox.Checked; attributes.system = systemCheckBox.Checked; Attributes = attributes; AccessRights accessRights = new AccessRights(); accessRights.user.canRead = userReadCheckBox.Checked; accessRights.user.canWrite = userWriteCheckBox.Checked; accessRights.user.canExecute = userExecuteCheckBox.Checked; accessRights.group.canRead = groupReadCheckBox.Checked; accessRights.group.canWrite = groupWriteCheckBox.Checked; accessRights.group.canExecute = groupExecuteCheckBox.Checked; accessRights.others.canRead = othersReadCheckBox.Checked; accessRights.others.canWrite = othersWriteCheckBox.Checked; accessRights.others.canExecute = othersExecuteCheckBox.Checked; AccessRights = accessRights; }
/// <summary> /// Возвращает группу прав доступа для текущего пользователя. /// </summary> /// <param name="currentUserId">Код текущего пользователя.</param> /// <param name="currentGroupId">Код группы текущего пользователя.</param> /// <param name="fileUserId">Код владельца файла.</param> /// <param name="fileGroupId">Код группы владельца файла.</param> /// <param name="accessRights">Права доступа к файлу.</param> /// <returns>Группу прав доступа для текущего пользователя.</returns> public static AccessRights.RightsGroup GetAccessRightsGroup(short currentUserId, short currentGroupId, short fileUserId, short fileGroupId, AccessRights accessRights) { if (currentUserId == 1 && currentGroupId == 1) { return new AccessRights.RightsGroup() { canRead = true, canWrite = true, canExecute = true }; } else if (currentUserId == fileUserId) { return accessRights.user; } else if (currentGroupId == fileGroupId) { return accessRights.group; } return accessRights.others; }
/// <summary> /// Назначает указанные права доступа файлу или каталогу. /// </summary> /// <param name="path">Путь к файлу или каталогу.</param> /// <param name="accessRights">Права доступа, которые будут назначены.</param> public void SetAccessRights(string path, AccessRights accessRights) { FileSystem.SetAccessRights(path, accessRights); }
/// <summary> /// Назначает указанные права доступа файлу или каталогу. /// </summary> /// <param name="path">Путь к файлу или каталогу.</param> /// <param name="accessRights">Права доступа, которые будут назначены.</param> public void SetAccessRights(string path, AccessRights accessRights) { Directory current = CurrentDirectory; Utils.CheckPath(path); string fullPath = Utils.GetFullPath(path, CurrentDirectory.FullPath); string parentDirectoryPath = Utils.GetDirectoryName(fullPath); Directory directory = OpenDirectory(parentDirectoryPath); //AccessRights ar = directory.AccessRights; if (!Utils.GetAccessRightsGroup(UserId, GroupId, directory.UserId, directory.GroupId, directory.AccessRights).canExecute) { throw new UnauthorizedAccessException("Текущий пользователь не имеет доступа к изменению прав доступа к объектам этого каталога!"); } string fileName = Utils.GetFileName(path); MetaFile metaFile = directory.Find(fileName); if (metaFile == null) { throw new FileNotFoundException("Указанный файл или каталог не существует!", path); } Inode inode = new Inode(); int sizeOfInode = Marshal.SizeOf(typeof(Inode)); FileStream.Seek(_superblock.inodeArrayAddress + (metaFile.InodeId - 1) * sizeOfInode, SeekOrigin.Begin); inode = (Inode)ReadStruct(FileStream, typeof(Inode)); inode.permissions = accessRights.ToInt16(); FileStream.Seek(-sizeOfInode, SeekOrigin.Current); WriteStruct(FileStream, inode); FlushAll(false); CurrentDirectory = current; }
public PropertiesForm(Attributes attributes, AccessRights accessRights) : this() { Attributes = attributes; AccessRights = accessRights; }