Started permissions, and moved server goroutine start to server creation
parent
6b7e166bb8
commit
419e7857f9
@ -0,0 +1,58 @@
|
|||||||
|
package pnyx
|
||||||
|
|
||||||
|
type PermissionLevel int
|
||||||
|
const (
|
||||||
|
PERMISSION_FALLTHROUGH PermissionLevel = iota
|
||||||
|
PERMISSION_ALLOW
|
||||||
|
PERMISSION_DENY
|
||||||
|
PERMISSION_ALLOW_ALL
|
||||||
|
PERMISSION_DENY_ALL
|
||||||
|
)
|
||||||
|
|
||||||
|
type Role string
|
||||||
|
type Action string
|
||||||
|
|
||||||
|
type Permissions map[Action]Permission
|
||||||
|
type Permission struct {
|
||||||
|
Level PermissionLevel
|
||||||
|
Next Permissions
|
||||||
|
}
|
||||||
|
|
||||||
|
func(permissions Permissions) Allowed(action []Action, def bool) bool {
|
||||||
|
if len(action) == 0 {
|
||||||
|
return def
|
||||||
|
} else if permissions == nil {
|
||||||
|
return def
|
||||||
|
}
|
||||||
|
|
||||||
|
perm, exists := permissions[action[0]]
|
||||||
|
if exists == false {
|
||||||
|
return def
|
||||||
|
} else if len(action) == 1 {
|
||||||
|
return perm.Level == PERMISSION_ALLOW || perm.Level == PERMISSION_ALLOW_ALL
|
||||||
|
} else {
|
||||||
|
switch perm.Level {
|
||||||
|
case PERMISSION_ALLOW_ALL:
|
||||||
|
return perm.Next.Allowed(action[1:], true)
|
||||||
|
case PERMISSION_DENY_ALL:
|
||||||
|
return perm.Next.Allowed(action[1:], false)
|
||||||
|
default:
|
||||||
|
return perm.Next.Allowed(action[1:], def)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func(permissions Permissions) Copy() Permissions {
|
||||||
|
if permissions == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
new_permissions := Permissions{}
|
||||||
|
for action, permission := range(permissions) {
|
||||||
|
new_permissions[action] = Permission{
|
||||||
|
Level: permission.Level,
|
||||||
|
Next: permission.Next.Copy(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new_permissions
|
||||||
|
}
|
Loading…
Reference in New Issue