https://github.com/miniscruff/scopie-go
Go package for scopie
https://github.com/miniscruff/scopie-go
Last synced: 5 months ago
JSON representation
Go package for scopie
- Host: GitHub
- URL: https://github.com/miniscruff/scopie-go
- Owner: miniscruff
- License: mit
- Created: 2023-12-25T00:46:01.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2026-01-22T04:55:26.000Z (6 months ago)
- Last Synced: 2026-01-22T18:51:24.357Z (5 months ago)
- Language: Go
- Homepage:
- Size: 82 KB
- Stars: 4
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Scopie
[](https://github.com/miniscruff/scopie-go/releases)
[](https://pkg.go.dev/github.com/miniscruff/scopie-go)
Go implementation of [scopie](https://github.com/miniscruff/scopie).
## Example
```go
import (
"errors"
"github.com/miniscruff/scopie-go"
)
type User struct {
Rules []string
}
type BlogPost struct {
Author User
Content string
}
var userStore map[string]User = map[string]User{
"elsa": User{
Rules: []string{"allow/blog/create|update"},
},
"belle": User{
Rules: []string{"allow/blog/create"},
},
}
var blogStore map[string]BlogPost = map[string]BlogPost{}
func createBlog(username, blogSlug, blogContent string) error {
user := users[username]
allowed, err := scopie.IsAllowed([]string{"blog/create"}, user.rules, nil)
if err != nil {
return err
}
if !allowed {
return errors.New("not allowed to create a blog post")
}
blogStore[blogSlug] = BlogPost{
Author: user,
Content: blogContent,
}
return nil
}
func updateBlog(username, blogSlug, blogContent string) error {
user := users[username]
allowed, err := scopie.IsAllowed([]string{"blog/update"}, user.rules, nil) {
if err != nil {
return err
}
if !allowed {
return errors.New("not allowed to update this blog post")
}
blogPosts[blogSlug] = BlogPost{
author: user,
content: blogContent,
}
return nil
}
```