Enhance user role management in App.svelte by adding fetchUserRole function; update UI to display user role badge upon login. Modify Follows struct to include owners and adjust access level logic in acl package for improved permission handling.
This commit is contained in:
@@ -40,6 +40,7 @@ type Follows struct {
|
||||
pubs *publish.S
|
||||
followsMx sync.RWMutex
|
||||
admins [][]byte
|
||||
owners [][]byte
|
||||
follows [][]byte
|
||||
updated chan struct{}
|
||||
subsCancel context.CancelFunc
|
||||
@@ -69,6 +70,16 @@ func (f *Follows) Configure(cfg ...any) (err error) {
|
||||
err = errorf.E("both config and database must be set")
|
||||
return
|
||||
}
|
||||
// add owners list
|
||||
for _, owner := range f.cfg.Owners {
|
||||
var own []byte
|
||||
if o, e := bech32encoding.NpubOrHexToPublicKeyBinary(owner); chk.E(e) {
|
||||
continue
|
||||
} else {
|
||||
own = o
|
||||
}
|
||||
f.owners = append(f.owners, own)
|
||||
}
|
||||
// find admin follow lists
|
||||
f.followsMx.Lock()
|
||||
defer f.followsMx.Unlock()
|
||||
@@ -129,11 +140,13 @@ func (f *Follows) Configure(cfg ...any) (err error) {
|
||||
}
|
||||
|
||||
func (f *Follows) GetAccessLevel(pub []byte, address string) (level string) {
|
||||
if f.cfg == nil {
|
||||
return "write"
|
||||
}
|
||||
f.followsMx.RLock()
|
||||
defer f.followsMx.RUnlock()
|
||||
for _, v := range f.owners {
|
||||
if utils.FastEqual(v, pub) {
|
||||
return "owner"
|
||||
}
|
||||
}
|
||||
for _, v := range f.admins {
|
||||
if utils.FastEqual(v, pub) {
|
||||
return "admin"
|
||||
@@ -144,6 +157,9 @@ func (f *Follows) GetAccessLevel(pub []byte, address string) (level string) {
|
||||
return "write"
|
||||
}
|
||||
}
|
||||
if f.cfg == nil {
|
||||
return "write"
|
||||
}
|
||||
return "read"
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
None = "none"
|
||||
// Read means read only
|
||||
Read = "read"
|
||||
// Write means read and write
|
||||
@@ -14,9 +15,6 @@ const (
|
||||
Admin = "admin"
|
||||
// Owner means read, write, import/export, arbitrary delete and wipe
|
||||
Owner = "owner"
|
||||
// Group applies to communities and other groups; the content afterwards a
|
||||
// set of comma separated <permission>:<pubkey> pairs designating permissions to groups.
|
||||
Group = "group:"
|
||||
)
|
||||
|
||||
type I interface {
|
||||
|
||||
Reference in New Issue
Block a user