mirror of
https://github.com/oarkflow/mq.git
synced 2025-09-26 20:11:16 +08:00
55 lines
2.2 KiB
Go
55 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/oarkflow/mq"
|
|
"github.com/oarkflow/mq/examples/tasks"
|
|
)
|
|
|
|
func main() {
|
|
b := mq.NewBroker(
|
|
mq.WithCallback(tasks.Callback),
|
|
mq.WithBrokerURL(":8081"),
|
|
mq.WithSecurity(true),
|
|
)
|
|
InitializeDefaults(b.SecurityManager())
|
|
// b := mq.NewBroker(mq.WithCallback(tasks.Callback), mq.WithTLS(true, "./certs/server.crt", "./certs/server.key"), mq.WithCAPath("./certs/ca.cert"))
|
|
if err := b.InitializeSecurity(); err != nil {
|
|
panic(err)
|
|
}
|
|
b.NewQueue("queue1")
|
|
b.NewQueue("queue2")
|
|
b.Start(context.Background())
|
|
}
|
|
|
|
// InitializeDefaults adds default permissions, roles, and users for development/testing
|
|
func InitializeDefaults(sm *mq.SecurityManager) error {
|
|
permissions := []*mq.Permission{
|
|
{Name: "task.publish", Resource: "task", Action: "publish", Description: "Publish tasks to queues", CreatedAt: time.Now()},
|
|
{Name: "task.consume", Resource: "task", Action: "consume", Description: "Consume tasks from queues", CreatedAt: time.Now()},
|
|
{Name: "queue.manage", Resource: "queue", Action: "manage", Description: "Manage queues", CreatedAt: time.Now()},
|
|
{Name: "admin.system", Resource: "system", Action: "admin", Description: "System administration", CreatedAt: time.Now()},
|
|
}
|
|
err := sm.AddPermissions(permissions...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
roles := []*mq.Role{
|
|
{Name: "publisher", Description: "Can publish tasks", Permissions: []string{"task.publish"}, CreatedAt: time.Now()},
|
|
{Name: "consumer", Description: "Can consume tasks", Permissions: []string{"task.consume"}, CreatedAt: time.Now()},
|
|
{Name: "admin", Description: "Full system access", Permissions: []string{"task.publish", "task.consume", "queue.manage", "admin.system"}, CreatedAt: time.Now()},
|
|
}
|
|
err = sm.AddRoles(roles...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
users := []*mq.User{
|
|
{ID: "admin", Username: "admin", Roles: []string{"admin"}, CreatedAt: time.Now(), Password: "admin123"},
|
|
{ID: "publisher", Username: "publisher", Roles: []string{"publisher"}, CreatedAt: time.Now(), Password: "pub123"},
|
|
{ID: "consumer", Username: "consumer", Roles: []string{"consumer"}, CreatedAt: time.Now(), Password: "con123"},
|
|
}
|
|
return sm.AddUsers(users...)
|
|
}
|