Select Git revision
ruleset.go 7.55 KiB
package permission
import (
"git.perx.ru/perxis/perxis-go/pkg/data"
perxisexpr "git.perx.ru/perxis/perxis-go/pkg/expr"
)
type Action uint64
const (
//ActionAny Action = iota
ActionCreate Action = iota + 1
ActionRead
ActionUpdate
ActionDelete
)
// Rule - правило доступа к контенту
type Rule struct {
CollectionID string `json:"collectionId" bson:"collectionId,omitempty"`
Actions []Action `json:"actions" bson:"actions,omitempty"`
Access Access `json:"access" bson:"access,omitempty"`
// Поля не передаются API клиенту
HiddenFields []string `json:"hiddenFields,omitempty" bson:"hiddenFields,omitempty"`
// Запрещен чтение указанные полей
DenyReadFields []string `json:"denyReadFields,omitempty" bson:"denyReadFields,omitempty"`
// Запрещена запись в указанные поля
DenyWriteFields []string `json:"denyWriteFields,omitempty" bson:"denyWriteFields,omitempty"`
// Дополнительный фильтр
ReadFilter string `json:"readFilter,omitempty" bson:"readFilter,omitempty"`
WriteFilter string `json:"writeFilter,omitempty" bson:"writeFilter,omitempty"`
}
func NewRule(collectionID string, actions ...Action) *Rule {
return &Rule{
CollectionID: collectionID,
Actions: actions,
}
}
func (r Rule) Clone() *Rule {
return &Rule{
CollectionID: r.CollectionID,
Actions: append([]Action(nil), r.Actions...),
Access: r.Access,
HiddenFields: append([]string(nil), r.HiddenFields...),
DenyReadFields: append([]string(nil), r.DenyReadFields...),
DenyWriteFields: append([]string(nil), r.DenyWriteFields...),
ReadFilter: r.ReadFilter,
WriteFilter: r.WriteFilter,
}
}
func (r Rule) WithReadFilter(f string) *Rule {
return &Rule{
CollectionID: r.CollectionID,
Actions: append([]Action(nil), r.Actions...),
Access: r.Access,
HiddenFields: append([]string(nil), r.HiddenFields...),
DenyReadFields: append([]string(nil), r.DenyReadFields...),
DenyWriteFields: append([]string(nil), r.DenyWriteFields...),
ReadFilter: f,
WriteFilter: r.WriteFilter,
}
}
func (r Rule) WithWriteFilter(f string) *Rule {
return &Rule{
CollectionID: r.CollectionID,
Actions: append([]Action(nil), r.Actions...),