部分或全部标识引用无法翻译为 c#

本文关键字:翻译 引用 全部 标识 | 更新日期: 2023-09-27 18:30:17

我正在尝试向用户授予访问该文件夹的权限,但是当我尝试运行该程序时,错误显示:Some or all identity references could not be translated

这是我正在使用的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Security;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Management;
using System.Management.Instrumentation;
namespace FolderLock
{
    public partial class Lock : Form
    {
        public Lock()
        {
            InitializeComponent();
            SetAccess();
        }
        private void Lock_Load(object sender, EventArgs e)
        {
        }
        public void SetAccess()
        {
            DirectoryInfo myDirectoryInfo = new DirectoryInfo("C:/Users/Trov/Desktop/Test");
            DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();
            string User = System.Environment.UserDomainName + "''" + "92111092";
            myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.Read, AccessControlType.Deny));
            myDirectoryInfo.SetAccessControl(myDirectorySecurity);
        }
    }
}

部分或全部标识引用无法翻译为 c#

我已经找到了一种方法,而不是尝试允许或拒绝特定用户对该文件夹的访问,我只是创建一个众所周知的经过身份验证的用户来拒绝或允许它访问该文件夹。

这是代码:

public void SetAccess()
        {
            DirectoryInfo myDirectoryInfo = new DirectoryInfo(@"C:/Users/Trov/Desktop/Test");
            var sid = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null); 
            DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();
            myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(sid, FileSystemRights.Read, AccessControlType.Deny));
            myDirectoryInfo.SetAccessControl(myDirectorySecurity);
            this.Hide();
            this.Close();
        }

谢谢

当我使用应用组安全性但使用用户的代码时,我遇到了此错误。这是我所做的:

'code called:
'THIS CODE IS CALLED IN THE SAME DOMAIN AS THE USER I NEED TO ADD
ApplyUserSecurity({user1,user2}.ToList(), "C:'temp", FileSystemeRights.Modify)

'Method called
Private Sub ApplyUserSecurity(identities As List(Of String), path As String, accessType As FileSystemRights)
     Dim dirInfo As New DirectoryInfo(path)
     Dim dirSec As DirectorySecurity = dirInfo.GetAccessControl(AccessControlSections.All)
     Dim acls = dirSec.GetAccessRules(True, True, GetType(Security.Principal.NTAccount))
    Dim identityFound As Boolean = False
    Dim applyChanges As Boolean = False
    For Each identity As String In identities
        identityFound= False
        For Each acl As FileSystemAccessRule In acls
            If identity = acl.IdentityReference.Value Then
                identityFound = True
                Exit For
            End If
        Next
    
        If Not identityFound Then
            dirSec.AddAccessRule(New FileSystemAccessRule(identity, accessType , AccessControlType.Allow))
            dirSec.AddAccessRule(New FileSystemAccessRule(identity, accessType , InheritanceFlags.ContainerInherit Or InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow))
            applyChanges = True
        End If
    Next
    'Apply changes only once for performance reason
    If applyChanges Then
        dirInfo.SetAccessControl(dirSec)
    End If
End Sub

以及我如何为组应用安全性(修改)。

If Directory.Exists("C:'temp") Then
     folderInfo = New IO.DirectoryInfo("C:'temp")
     folderAcl = folderInfo.GetAccessControl()
     folderAcl.AddAccessRule(New FileSystemAccessRule("domain'groupName", FileSystemRights.Modify, InheritanceFlags.ContainerInherit Or InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow))
     folderInfo.SetAccessControl(folderAcl)
end If