One-view tokens: local records in linked zones, zone lookup, view list
A token for one view of a linked zone (an ACME token for external) couldn't add records: a new record was shared and reached the other view. A new name and type is now local when the user may not change it in the other views. A zone name in several views resolves to the only one the user can see, and the error no longer names views they can't. GET /views lists the views a user sees zones in (name, colour, count; limited) without views:read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4cc2ab2287
commit
57012fece8
13 files changed
+159
-12
No files matched your search
@@ -456,12 +456,30 @@ func (x *expander) unlinkOps(m *model.Zone, summary string) []model.Op {
|
||||
|
||||
// localFor works out whether a new record (or set) in zone z is local:
|
||||
// as asked, or like the records of the same name and type already there.
|
||||
// A new name and type is shared, unless the principal may not change it
|
||||
// in every linked view (an ACME token for the external view only): then
|
||||
// it is local to z's view, which is all they may change.
|
||||
func (x *expander) localFor(z *model.Zone, name, typ string, want *bool) (bool, error) {
|
||||
has := x.st.HasLocal(z.ID, name, typ)
|
||||
if want == nil {
|
||||
return has, nil
|
||||
if want != nil {
|
||||
return *want, nil
|
||||
}
|
||||
return *want, nil
|
||||
if x.st.HasLocal(z.ID, name, typ) {
|
||||
return true, nil
|
||||
}
|
||||
if len(x.st.SharedRecords(z.ID, name, typ)) > 0 {
|
||||
return false, nil
|
||||
}
|
||||
var not []string
|
||||
for _, o := range x.st.LinkedWith(z) {
|
||||
if !x.p.Can(recordAction(x.st, o, name, typ, true)) {
|
||||
not = append(not, x.st.ViewName(o))
|
||||
}
|
||||
}
|
||||
if len(not) > 0 {
|
||||
x.warnings = append(x.warnings, fmt.Sprintf("%s %s is local to view %s: you may not change it in %s", dnsname.Display(name), typ, x.st.ViewName(z), strings.Join(not, ", ")))
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// shareAllOps returns the operations that start a link with zone z: it
|
||||
|
||||
Reference in new issue
Block a user