etcdserver/api/v2auth/auth.go
func (rw RWPermission) Grant(n RWPermission) (RWPermission, error) {
	var out RWPermission
	currentRead := types.NewUnsafeSet(rw.Read...)
	for _, r := range n.Read {
		if currentRead.Contains(r) {
			return out, authErr(http.StatusConflict, "Granting duplicate read permission %s", r)
		}
		currentRead.Add(r)
	}
	currentWrite := types.NewUnsafeSet(rw.Write...)
	for _, w := range n.Write {
		if currentWrite.Contains(w) {
			return out, authErr(http.StatusConflict, "Granting duplicate write permission %s", w)
		}
		currentWrite.Add(w)
	}
	out.Read = currentRead.Values()
	out.Write = currentWrite.Values()
	sort.Strings(out.Read)
	sort.Strings(out.Write)
	return out, nil
}
func (rw RWPermission) Grant(n RWPermission) (RWPermission, error) {
	var out RWPermission
	currentRead := types.NewUnsafeSet(rw.Read...)
	for _, r := range n.Read {
		if currentRead.Contains(r) {
			return out, authErr(http.StatusConflict, "Granting duplicate read permission %s", r)
		}
		currentRead.Add(r)
	}
	currentWrite := types.NewUnsafeSet(rw.Write...)
	for _, w := range n.Write {
		if currentWrite.Contains(w) {
			return out, authErr(http.StatusConflict, "Granting duplicate write permission %s", w)
		}
		currentWrite.Add(w)
	}
	out.Read = currentRead.Values()
	out.Write = currentWrite.Values()
	sort.Strings(out.Read)
	sort.Strings(out.Write)
	return out, nil
}
func ( rw RWPermission ) Grant ( n RWPermission ) ( RWPermission , error ) { var out RWPermission currentRead := types . NewUnsafeSet ( rw . Read ... ) for _ , r := range n . Read { if currentRead . Contains ( r ) { return out , authErr ( http . StatusConflict , " " , r ) } currentRead . Add ( r ) } currentWrite := types . NewUnsafeSet ( rw . Write ... ) for _ , w := range n . Write { if currentWrite . Contains ( w ) { return out , authErr ( http . StatusConflict , " " , w ) } currentWrite . Add ( w ) } out . Read = currentRead . Values ( ) out . Write = currentWrite . Values ( ) sort . Strings ( out . Read ) sort . Strings ( out . Write ) return out , nil }
// Grant adds a set of permissions to the permission object on which it is called,
// returning a new permission object.
Grant adds a set of permissions to the permission object on which it is called returning a new permission object .