Go操作文件权限在linux下很简单,使用os.Chown()方法就可以实现,但是windows下面却不能这样使用。

用于在 Windows 上操作 ACL 的 Go 库

这个库使用也很简单,比如更改目录下全部文件权限为当前用户

var (
	Username    string
)

func init() {

	u, err := user.Current()
	if err != nil {
		fmt.Println("获取当前用户失败!")
		os.Exit(2)
	}
	Username = u.Username
}

func WindowsAclFile(file_path string)  error {
	if err := acl.Apply(
		file_path,
		false,
		false,
		acl.GrantName(windows.GENERIC_ALL, Username),
	); err != nil {
		fmt.Println("文件权限失败!")
		return err
	}
	return nil
}
// 获取目录下所有文件
func FixAllFile() {
	filepath.Walk(basedir,
		func(filepath string, info os.FileInfo, err error) error {
			if err != nil {
				return err
			}
			if !info.IsDir() {
				if err := WindowsAclFile(filepath); err != nil {
					fmt.Println(filepath + " 修复失败")
				}else{
					fmt.Println(filepath + " 修复成功")
				}
			}
			return nil
		})

}

授予ddn读权限,授予test拒绝权限

if err := acl.Apply(
    "C:\\path\\to\\file.txt",
    false,
    false,
    acl.GrantName(windows.GENERIC_READ, "ddn"),
    acl.DenyName(windows.GENERIC_WRITE, "test"),
); err != nil {
    panic(err)
}

Windows相关权限

DELETE
READ_CONTROL
WRITE_DAC
WRITE_OWNER
SYNCHRONIZE
STANDARD_RIGHTS_REQUIRED
STANDARD_RIGHTS_READ
STANDARD_RIGHTS_WRITE
STANDARD_RIGHTS_EXECUTE
STANDARD_RIGHTS_ALL
SPECIFIC_RIGHTS_ALL
ACCESS_SYSTEM_SECURITY
MAXIMUM_ALLOWED
GENERIC_READ
GENERIC_WRITE
GENERIC_EXECUTE
GENERIC_ALL