40 lines
745 B
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
|
|
}
|