mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
61 lines
966 B
Go
61 lines
966 B
Go
|
package filesys
|
||
|
|
||
|
import (
|
||
|
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
|
||
|
"github.com/seaweedfs/fuse"
|
||
|
)
|
||
|
|
||
|
func checkPermission(entry *filer_pb.Entry, uid, gid uint32, isWrite bool) error {
|
||
|
if entry == nil {
|
||
|
return nil
|
||
|
}
|
||
|
if entry.Attributes == nil {
|
||
|
return nil
|
||
|
}
|
||
|
attr := entry.Attributes
|
||
|
if attr.Uid == uid {
|
||
|
if isWrite {
|
||
|
if attr.FileMode&0002 > 0 {
|
||
|
return nil
|
||
|
} else {
|
||
|
return fuse.EPERM
|
||
|
}
|
||
|
} else {
|
||
|
if attr.FileMode&0004 > 0 {
|
||
|
return nil
|
||
|
} else {
|
||
|
return fuse.EPERM
|
||
|
}
|
||
|
}
|
||
|
} else if attr.Gid == gid {
|
||
|
if isWrite {
|
||
|
if attr.FileMode&0020 > 0 {
|
||
|
return nil
|
||
|
} else {
|
||
|
return fuse.EPERM
|
||
|
}
|
||
|
} else {
|
||
|
if attr.FileMode&0040 > 0 {
|
||
|
return nil
|
||
|
} else {
|
||
|
return fuse.EPERM
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
if isWrite {
|
||
|
if attr.FileMode&0200 > 0 {
|
||
|
return nil
|
||
|
} else {
|
||
|
return fuse.EPERM
|
||
|
}
|
||
|
} else {
|
||
|
if attr.FileMode&0400 > 0 {
|
||
|
return nil
|
||
|
} else {
|
||
|
return fuse.EPERM
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|