Casbin

Casbin

  • Документ
  • API
  • Редактор
  • Плагины IDE
  • Single Sign-On (SSO)
  • Форум
  • Справка
  • Блог
  • Pricing
  • Contact Sales
  • Languages iconРусский
    • English
    • 中文
    • 한국어
    • Français
    • Deutsch
    • 日本語
    • Помочь перевести
  • GitHub

›Управление

Основы

  • Общий обзор
  • Начать работу
  • Как это работает
  • Уроки

Модель

  • Поддерживаемые модели
  • Синтаксис для моделей
  • Эффект
  • Функция
  • RBAC
  • RBAC with Pattern
  • RBAC с доменами
  • Casbin RBAC v.s. RBAC96
  • АДАТ
  • Приоритетная модель
  • Супер админ

Хранилище

  • Модель хранилища
  • Хранилище политики
  • Загрузка подмножества политик

Расширения

  • Enforcers
  • Адаптеры
  • Наблюдатели
  • Диспетчеры
  • Менеджеры ролей
  • Посредники
  • GraphQL Middlewares
  • Облачные Посредники

API

  • Обзор API
  • API управления
  • RBAC API
  • RBAC с доменным API
  • RoleManager API
  • Права доступа к данным

Расширенное использование

  • Многопоточность
  • Benchmarks
  • Оптимизация производительности
  • Авторизация Кубернетов
  • Авторизация служебной ячейки через посланника

Управление

  • Администратор портала
  • Служба Касбина
  • Обработка журнала и ошибок
  • Использование интерфейса

Редактор

  • Онлайн-редактор
  • Плагины IDE

Ещё

  • Наши усыновители
  • Вклад
  • Политика конфиденциальности
  • Условия предоставления услуг
Translate

Обработка журнала и ошибок

Ведение журнала

Касбин использует встроенный лог для печати журналов в консоли по умолчанию:

2017/07/15 19:43:56 [Запрос: аль, данные1, чтение ---> true]

Журналирование не включено по умолчанию. Вы можете переключить его через Enforcer.EnableLog() или последний параметр NewEnforcer().

::note
Мы уже поддерживаем регистрацию модели, обеспечивать выполнение запроса, роли, политики на Голанге. Вы можете определить свой собственный лог для входа в Casbin. Если вы используете Python, pycasbin использует стандартный механизм записи логов Python. Пакет pycasbin заставляет вызвать logging.getLogger(), чтобы установить логгер. Не требуется никакой специальной настройки ведения журнала, кроме инициализации логгера в родительском приложении. Если ни один вход не интицизирован в родительском приложении, вы не увидите ни одного сообщения журнала из pycasbin. :::

Использовать другой логгер для различных усилителей

У каждого силовика может быть свой собственный логгер, чтобы войти в систему, и он может быть изменен во время работы.

И вы можете использовать корректный логгер, используя последний параметр NewEnforcer(), если вы используете этот способ для инициализации вашего форума, не нужно использовать включенный параметр, что выше приоритет включенного поля.

// Установлен логгер по умолчанию как логгер e1.
// Эта операция также может рассматриваться как изменение логгера e1 во время выполнения.
e1.SetLogger(&Log.DefaultLogger{})

// Установить другой логгер в качестве журналиста e2.
e2.SetLogger(&YouOwnLogger)

// Установка логгера при инициализации enforcer e3.
e3, _ := casbin.NewEnforcer("Пример/rbac_model.conf", a, logger)

Поддерживаемые логгеры

Мы предоставляем некоторые логгеры, чтобы помочь вам зарегистрировать информацию.

Go
PHP
LoggerАвторОписание
Защитный логгер (встроен)CasbinЛоггер по умолчанию, используя golang log.
Zap loggerCasbinС помощью zap, предоставьте журнал с кодировкой json и вы можете настроить больше с помощью своего zap-logger.
LoggerАвторОписание
logger psr3-bridgeCasbinПредоставляет совместимый с PSR-3 мост.

Как записать логгер

Ваш логгер должен реализовать интерфейс Logger.

МетодТипОписание
EnableLog()mandatoryПроверьте, печатает ли сообщение.
Включено ()mandatoryПоказывать статус текущего логгера.
LogModel()mandatoryИнформация о журнале относительно модели.
LogEnforce()mandatoryЖурнал информации о вступлении.
LogRole()mandatoryЛог информации, относящейся к роли.
LogPolicy()mandatoryЛог информации, связанной с политикой.

Вы можете передать свой лог Enforcer.SetLogger().

Вот пример того, как настроить логгеры для Golang:

импорт (
    "fmt"
    "log"
    "strings"
)

// DefaultLogger - реализация для журнала с использованием golang log.
type DefaultLogger struct {
    enabled bool
}

func (l *DefaultLogger) EnableLog(enable bool) {
    l. nabled = enable
}

func (l *DefaultLogger) IsEnabled() bool {
    return l.enabled
}

func (l *DefaultLogger) LogModel(model [][]string) {
    if !l. nabled {
        return
    }
    var str strings.Builder
    str. riteString("Модель: ")
    для _, v := range model {
        str. riteString(fmt.Sprintf("%v\n", v))
    }

    log.Println(str. tring())
}

func (l *DefaultLogger) LogEnforce(matcher string, request []interface{}, result bool, explains [][]string) {
    if !l. nabled {
        return
    }

    var reqStr strings.Builder
    reqStr. riteString("Запрос: ")
    для i, rval := request {
        if i ! len(request)-1 {
            reqStr. riteString(fmt. printf("%v, ", rval))
        } else {
            reqStr. riteString(fmt. printf("%v", rval))
        }
    }
    reqStr. riteString(fmt.Sprintf(" ---> %t\n", результат))

    reqStr. riteString("Политика хитов: ")
    для i, pval := range объясняет {
        if i ! len(explains)-1 {
            reqStr. riteString(fmt. printf("%v, ", pval))
        } else {
            reqStr. riteString(fmt. printf("%v \n", pval))
        }
    }

    log. rintln(reqStr. tring())
}

func (l *DefaultLogger) LogPolicy(policy map[string][][]string) {
    if !l. nabled {
        return
    }

    var str строк. uilder
    str. riteString("Политика: ")
    для k, v := range policy {
        str.WriteString(fmt. printf("%s : %v\n", k, v))
    }

    log.Println(str. tring())
}

func (l *DefaultLogger) LogRole(roles []string) {
    if !l. nabled {
        return
    }

    log.Println("Роли: ", роли)
}

Обработка ошибок

Ошибка или паника может произойти при использовании Casbin по следующим причинам:

  1. Неверный синтаксис в файле модели (.conf).
  2. Неверный синтаксис в файле политики (.csv).
  3. Пользовательская ошибка от адаптеров хранения, например, MySQL не удается подключиться.
  4. Casbin's bug.

Существует пять основных функций, которые вам могут понадобиться для устранения ошибки или паники:

ФункцияПоведение при ошибке
NewEnforcer()Ошибка возврата
LoadModel()Ошибка возврата
LoadPolicy()Ошибка возврата
Сохранение политики ()Ошибка возврата
Enforce()Ошибка возврата

::note NewEnforcer() вызывает LoadModel() и LoadPolicy() внутри. Поэтому вам не нужно вызывать два последних вызова при использовании NewEnforcer(). :::

Включить & отключить

Силор может быть отключен через функцию Enforcer.EnableEnforce(). Когда он отключен, Enforcer.Enforce() всегда возвращает true. Другие операции, такие как добавление или удаление политики, не затрагиваются. Вот пример:

e := casbin.NewEnforcer("examples/basic_model.conf", "examples/basic_policy.csv")

// вернет false.
// По умолчанию, энсилиар включен.
e.Enforce("non-authorized-user", "data1", "read")

// Отключение усилителя во время запуска.
e.EnableEnforce(false)

// Возвращает истину за любой запрос.
e.Enforce("non-authorized-user", "data1", "read")

// Повторяйте вкл.
e.EnableEnforce(true)

// Возвращает false.
e.Enforce("non-authorized-user", "data1", "read")
← Служба КасбинаИспользование интерфейса →
  • Ведение журнала
    • Использовать другой логгер для различных усилителей
  • Обработка ошибок
  • Включить & отключить
Casbin
Docs
Getting StartedManagement APIRBAC APIMiddlewares
Community
Who's using Casbin?Stack Overflow
Casbin          jCasbin
Node-Casbin   PHP-CasbinPyCasbin          Casbin.NETCasbin-CPP        Casbin-RS
Follow @casbinHQ
Copyright © 2022 Casbin Organization