Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| db43357ce0 | |||
| 1476170f88 |
@@ -21,15 +21,25 @@ type CompanyPrivileges struct {
|
|||||||
|
|
||||||
// PrivilegeAdded is the event sent when a new privilege is added
|
// PrivilegeAdded is the event sent when a new privilege is added
|
||||||
type PrivilegeAdded struct {
|
type PrivilegeAdded struct {
|
||||||
Email string `json:"email"`
|
Email string `json:"email"`
|
||||||
CompanyID string `json:"companyId"`
|
CompanyID string `json:"companyId"`
|
||||||
Admin bool `json:"admin"`
|
Name string `json:"name"`
|
||||||
Company bool `json:"company"`
|
RegistrationNumber string `json:"registrationNumber"`
|
||||||
Consumer bool `json:"consumer"`
|
Admin bool `json:"admin"`
|
||||||
Time bool `json:"time"`
|
Company bool `json:"company"`
|
||||||
Invoicing bool `json:"invoicing"`
|
Consumer bool `json:"consumer"`
|
||||||
Accounting bool `json:"accounting"`
|
Time bool `json:"time"`
|
||||||
Supplier bool `json:"supplier"`
|
Invoicing bool `json:"invoicing"`
|
||||||
|
Accounting bool `json:"accounting"`
|
||||||
|
Supplier bool `json:"supplier"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrivilegeRemoved is the event sent when a privilege is removed
|
||||||
|
type PrivilegeRemoved struct {
|
||||||
|
Email string `json:"email"`
|
||||||
|
CompanyID string `json:"companyId"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
RegistrationNumber string `json:"registrationNumber"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrivilegeHandler processes PrivilegeAdded-events and fetches the initial set of privileges from an authz-service
|
// PrivilegeHandler processes PrivilegeAdded-events and fetches the initial set of privileges from an authz-service
|
||||||
@@ -83,13 +93,17 @@ func (h *PrivilegeHandler) Fetch() error {
|
|||||||
|
|
||||||
// Process privilege-related events and update the internal state
|
// Process privilege-related events and update the internal state
|
||||||
func (h *PrivilegeHandler) Process(msg interface{}) bool {
|
func (h *PrivilegeHandler) Process(msg interface{}) bool {
|
||||||
if ev, ok := msg.(*PrivilegeAdded); ok {
|
switch ev := msg.(type) {
|
||||||
|
case *PrivilegeAdded:
|
||||||
h.setPrivileges(ev)
|
h.setPrivileges(ev)
|
||||||
return true
|
return true
|
||||||
} else {
|
case *PrivilegeRemoved:
|
||||||
|
h.removePrivileges(ev)
|
||||||
|
return true
|
||||||
|
default:
|
||||||
fmt.Printf("Got unexpected message type (%s): '%+v'\n", reflect.TypeOf(msg).String(), msg)
|
fmt.Printf("Got unexpected message type (%s): '%+v'\n", reflect.TypeOf(msg).String(), msg)
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *PrivilegeHandler) setPrivileges(ev *PrivilegeAdded) {
|
func (h *PrivilegeHandler) setPrivileges(ev *PrivilegeAdded) {
|
||||||
@@ -111,6 +125,12 @@ func (h *PrivilegeHandler) setPrivileges(ev *PrivilegeAdded) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *PrivilegeHandler) removePrivileges(ev *PrivilegeRemoved) {
|
||||||
|
if priv, exists := h.privileges[ev.Email]; exists {
|
||||||
|
delete(priv, ev.CompanyID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// CompaniesByUser return a slice of company ids matching the provided email and predicate func
|
// CompaniesByUser return a slice of company ids matching the provided email and predicate func
|
||||||
func (h *PrivilegeHandler) CompaniesByUser(email string, predicate func(privileges CompanyPrivileges) bool) []string {
|
func (h *PrivilegeHandler) CompaniesByUser(email string, predicate func(privileges CompanyPrivileges) bool) []string {
|
||||||
var result []string
|
var result []string
|
||||||
@@ -123,3 +143,14 @@ func (h *PrivilegeHandler) CompaniesByUser(email string, predicate func(privileg
|
|||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsAllowed return true if the provided predicate return true for the privileges matching the provided email and companyID, return false otherwise
|
||||||
|
func (h *PrivilegeHandler) IsAllowed(email, companyID string, predicate func(privileges CompanyPrivileges) bool) bool {
|
||||||
|
if p, exists := h.privileges[email]; exists {
|
||||||
|
if v, exists := p[companyID]; exists {
|
||||||
|
return predicate(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user