goread/permissions.go

40 lines
745 B
Go

package main
import (
"fmt"
"os/user"
)
// map groupname -> pretty name
var privilegedGroups = map[string]string{
"office": "Office worker",
"libcom": "Library Committee",
}
// IsPrivilegedUser checks to see if the current user is privileged.
func IsPrivilegedUser() (bool, error) {
person, err := user.Current()
if err != nil {
return false, fmt.Errorf("failed to get current user: %w", err)
}
groups, err := person.GroupIds()
if err != nil {
return false, fmt.Errorf("failed to get group ids: %w", err)
}
for _, gid := range groups {
group, err := user.LookupGroupId(gid)
if err != nil {
// Log error
continue
}
if _, ok := privilegedGroups[group.Name]; ok {
return true, nil
}
}
return false, nil
}