diff --git a/pkg/members/members.go b/pkg/members/members.go
index 0993b6fddfe34cf7f257e6b70433893485a60dba..4e153058c5004bdb13dd5a0b548abdf311ac49c8 100644
--- a/pkg/members/members.go
+++ b/pkg/members/members.go
@@ -24,12 +24,32 @@ func (r Role) IsPrivileged() bool {
 }
 
 func (r Role) Format(s fmt.State, verb rune) {
+	s.Write([]byte(r.String()))
+}
+
+func (r Role) String() string {
 	switch r {
+	case NotMember:
+		return "not member"
+	case RoleMember:
+		return "member"
 	case RoleOwner:
-		fmt.Fprint(s, "owner")
+		return "owner"
 	case RoleAdmin:
-		fmt.Fprint(s, "admin")
-	case RoleMember:
-		fmt.Fprint(s, "member")
+		return "admin"
+	}
+	return fmt.Sprintf("%d", r)
+}
+
+func RoleFromString(r string) Role {
+	switch r {
+	case RoleMember.String():
+		return RoleMember
+	case RoleOwner.String():
+		return RoleOwner
+	case RoleAdmin.String():
+		return RoleAdmin
+	default:
+		return NotMember
 	}
 }