// Checks if the specified user has permission to perform // certain operation on a file. Perm contains one or more // of ninep.DMREAD, ninep.DMWRITE, and ninep.DMEXEC. func (f *File) CheckPerm(user ninep.User, perm uint32) bool { if user == nil { return false } perm &= 7 /* other permissions */ fperm := f.Mode & 7 if (fperm & perm) == perm { return true } /* user permissions */ if f.Uid == user.Name() || f.Uidnum == uint32(user.Id()) { fperm |= (f.Mode >> 6) & 7 } if (fperm & perm) == perm { return true } /* group permissions */ groups := user.Groups() if groups != nil && len(groups) > 0 { for i := 0; i < len(groups); i++ { if f.Gid == groups[i].Name() || f.Gidnum == uint32(groups[i].Id()) { fperm |= (f.Mode >> 3) & 7 break } } } if (fperm & perm) == perm { return true } return false }