Categorygithub.com/oreshkindev/rbac-middleware
modulepackage
0.0.4
Repository: https://github.com/oreshkindev/rbac-middleware.git
Documentation: pkg.go.dev

# README

RBAC middleware

RBAC расшифровывается как «Role-Based Access Control». Это подход к ограничению доступа к системе для авторизованных пользователей. В системе RBAC права доступа назначаются не непосредственно отдельным пользователям, а ролям, которые могут быть у пользователей. Эти роли представляют собой набор привилегий или прав доступа, которые определяют, какие действия пользователь может выполнять в системе или приложении.

Например, типичные роли в организации могут включать:

  • superuser: Имеет полный доступ ко всем ресурсам и может управлять другими пользователями и их ролями.

  • manager: Имеет доступ к определенному набору ресурсов, необходимых для выполнения своих должностных обязанностей.

  • guest: Имеет очень ограниченный доступ, например, доступ к публичной информации только для чтения.

RBAC позволяет администраторам легче управлять доступом к системе, назначая и переназначая роли, а не устанавливая разрешения для каждого пользователя в отдельности. Это делает модель масштабируемой и гибкой, особенно в крупных организациях.

Установка

go get -u github.com/oreshkindev/rbac-middleware

Использование

import (
    "github.com/oreshkindev/rbac-middleware"
)

Настройте секретный ключ для JWT:

os.Setenv("SECRET_KEY", "ваш секретный ключ")

или используйте окружение .env.sh

export SECRET_KEY="ваш секретный ключ"

или доверьтесь openssl

export SECRET_KEY="$(openssl rand -base64 32)"

Определите роли:

const (
	superuser   string = "superuser"
	manager     string = "manager"
	guest       string = "guest"
)

или

const (
    superuser int64 = iota + 1
    manager
    guest
)

Используй мидлварь в своем HTTP хендлере:

http.Handle("/lk", rbac.Middleware(superuser)(ваш хендлер))

или

router := chi.NewRouter()

router.With(rbac.Middleware(superuser)).Post("/", ваш хендлер)

Создание токена:

token, err := rbac.Hash(map[string]interface{}{
		"email":      c.Email,
		"permission": c.PermissionID,
	}, timeout)

или

type Claims struct {
    Email string `json:"email"`
    PermissionID int64 `json:"permission"`
}

func (c Claims) ToClaims() map[string]interface{} {
    return map[string]interface{}{
        "email": c.Email,
        "permission": c.PermissionID,
    }
}

token, err := rbac.Hash(UserClaims{Email: "example@...", PermissionID: 1}, timeout)

# Functions

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Constants

No description provided by the author

# Structs

No description provided by the author

# Interfaces

No description provided by the author
Renderer интерфейс для объектов, которые могут быть отрендерены в HTTP-ответ.

# Type aliases

No description provided by the author