Перейти до основного вмісту

Основні поняття

Як адміністратор Casdoor, вам слід знати принаймні чотири основні поняття: Організація, Користувач, Додаток та Провайдер.

порада

У наступних частинах ми будемо використовувати демонстраційний сайт https://door.casdoor.com як приклад.

Організація

У Casdoor організація є контейнером для користувачів та додатків. Наприклад, всі співробітники компанії або всі клієнти бізнесу можуть бути абстраговані як одна організація. Нижче наведено визначення класу Організація:

type Organization struct {
Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
Name string `xorm:"varchar(100) notnull pk" json:"name"`
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`

DisplayName string `xorm:"varchar(100)" json:"displayName"`
WebsiteUrl string `xorm:"varchar(100)" json:"websiteUrl"`
Favicon string `xorm:"varchar(100)" json:"favicon"`
PasswordType string `xorm:"varchar(100)" json:"passwordType"`
PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"`
PhonePrefix string `xorm:"varchar(10)" json:"phonePrefix"`
DefaultAvatar string `xorm:"varchar(100)" json:"defaultAvatar"`
Tags []string `xorm:"mediumtext" json:"tags"`
MasterPassword string `xorm:"varchar(100)" json:"masterPassword"`
EnableSoftDeletion bool `json:"enableSoftDeletion"`
IsProfilePublic bool `json:"isProfilePublic"`

AccountItems []*AccountItem `xorm:"varchar(2000)" json:"accountItems"`
}

Користувач

У Casdoor користувач може увійти в додаток. Кожен користувач може належати лише до однієї організації, але може увійти в кілька додатків, що належать організації. Наразі в Casdoor є два типи користувачів:

  • користувачі організації built-in, такі як built-in/admin: глобальні адміністратори, які мають повні адміністративні повноваження на платформі Casdoor.
  • Користувачі інших організацій, такі як my-company/alice: звичайні користувачі, які можуть реєструватися, входити, виходити, змінювати свій профіль тощо.

У API Casdoor користувача зазвичай ідентифікують як <organization_name>/<username>. Наприклад, за замовчуванням адміністратор Casdoor позначається як built-in/admin. Крім того, визначення класу Користувач включає властивість id, яка є UUID, наприклад d835a48f-2e88-4c1f-b907-60ac6b6c1b40, і може бути вибрана як ID користувача додатком.

порада

Для додатків, які призначені лише для однієї організації, можна використовувати <username> замість <organization_name>/<username> як ID користувача в додатку для спрощення.

Ось визначення класу Користувач:

type User struct {
Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
Name string `xorm:"varchar(100) notnull pk" json:"name"`
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
UpdatedTime string `xorm:"varchar(100)" json:"updatedTime"`

Id string `xorm:"varchar(100)" json:"id"`
Type string `xorm:"varchar(100)" json:"type"`
Password string `xorm:"varchar(100)" json:"password"`
PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"`
DisplayName string `xorm:"varchar(100)" json:"displayName"`
Avatar string `xorm:"varchar(500)" json:"avatar"`
PermanentAvatar string `xorm:"varchar(500)" json:"permanentAvatar"`
Email string `xorm:"varchar(100) index" json:"email"`
Phone string `xorm:"varchar(100) index" json:"phone"`
Location string `xorm:"varchar(100)" json:"location"`
Address []string `json:"address"`
Affiliation string `xorm:"varchar(100)" json:"affiliation"`
Title string `xorm:"varchar(100)" json:"title"`
IdCardType string `xorm:"varchar(100)" json:"idCardType"`
IdCard string `xorm:"varchar(100) index" json:"idCard"`
Homepage string `xorm:"varchar(100)" json:"homepage"`
Bio string `xorm:"varchar(100)" json:"bio"`
Tag string `xorm:"varchar(100)" json:"tag"`
Region string `xorm:"varchar(100)" json:"region"`
Language string `xorm:"varchar(100)" json:"language"`
Gender string `xorm:"varchar(100)" json:"gender"`
Birthday string `xorm:"varchar(100)" json:"birthday"`
Education string `xorm:"varchar(100)" json:"education"`
Score int `json:"score"`
Ranking int `json:"ranking"`
IsDefaultAvatar bool `json:"isDefaultAvatar"`
IsOnline bool `json:"isOnline"`
IsAdmin bool `json:"isAdmin"`
IsGlobalAdmin bool `json:"isGlobalAdmin"`
IsForbidden bool `json:"isForbidden"`
IsDeleted bool `json:"isDeleted"`
SignupApplication string `xorm:"varchar(100)" json:"signupApplication"`
Hash string `xorm:"varchar(100)" json:"hash"`
PreHash string `xorm:"varchar(100)" json:"preHash"`

CreatedIp string `xorm:"varchar(100)" json:"createdIp"`
LastSigninTime string `xorm:"varchar(100)" json:"lastSigninTime"`
LastSigninIp string `xorm:"varchar(100)" json:"lastSigninIp"`

Github string `xorm:"varchar(100)" json:"github"`
Google string `xorm:"varchar(100)" json:"google"`
QQ string `xorm:"qq varchar(100)" json:"qq"`
WeChat string `xorm:"wechat varchar(100)" json:"wechat"`
Facebook string `xorm:"facebook varchar(100)" json:"facebook"`
DingTalk string `xorm:"dingtalk varchar(100)" json:"dingtalk"`
Weibo string `xorm:"weibo varchar(100)" json:"weibo"`
Gitee string `xorm:"gitee varchar(100)" json:"gitee"`
LinkedIn string `xorm:"linkedin varchar(100)" json:"linkedin"`
Wecom string `xorm:"wecom varchar(100)" json:"wecom"`
Lark string `xorm:"lark varchar(100)" json:"lark"`
Gitlab string `xorm:"gitlab varchar(100)" json:"gitlab"`
Apple string `xorm:"apple varchar(100)" json:"apple"`
AzureAD string `xorm:"azuread varchar(100)" json:"azuread"`
Slack string `xorm:"slack varchar(100)" json:"slack"`

Ldap string `xorm:"ldap varchar(100)" json:"ldap"`
Properties map[string]string `json:"properties"`
}

Додаток

Сильний додаток представляє веб-сервіс, який потребує захисту Casdoor, такий як форум, система OA або CRM-система.

type Application struct {
Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
Name string `xorm:"varchar(100) notnull pk" json:"name"`
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
DisplayName string `xorm:"varchar(100)" json:"displayName"`
Logo string `xorm:"varchar(100)" json:"logo"`
HomepageUrl string `xorm:"varchar(100)" json:"homepageUrl"`
Description string `xorm:"varchar(100)" json:"description"`
Organization string `xorm:"varchar(100)" json:"organization"`
Cert string `xorm:"varchar(100)" json:"cert"`
EnablePassword bool `json:"enablePassword"`
EnableSignUp bool `json:"enableSignUp"`
EnableSigninSession bool `json:"enableSigninSession"`
EnableCodeSignin bool `json:"enableCodeSignin"`
Providers []*ProviderItem `xorm:"mediumtext" json:"providers"`
SignupItems []*SignupItem `xorm:"varchar(1000)" json:"signupItems"`
OrganizationObj *Organization `xorm:"-" json:"organizationObj"`
ClientId string `xorm:"varchar(100)" json:"clientId"`
ClientSecret string `xorm:"varchar(100)" json:"clientSecret"`
RedirectUris []string `xorm:"varchar(1000)" json:"redirectUris"`
TokenFormat string `xorm:"varchar(100)" json:"tokenFormat"`
ExpireInHours int `json:"expireInHours"`
RefreshExpireInHours int `json:"refreshExpireInHours"`
SignupUrl string `xorm:"varchar(200)" json:"signupUrl"`
SigninUrl string `xorm:"varchar(200)" json:"signinUrl"`
ForgetUrl string `xorm:"varchar(200)" json:"forgetUrl"`
AffiliationUrl string `xorm:"varchar(100)" json:"affiliationUrl"`
TermsOfUse string `xorm:"varchar(100)" json:"termsOfUse"`
SignupHtml string `xorm:"mediumtext" json:"signupHtml"`
SigninHtml string `xorm:"mediumtext" json:"signinHtml"`
}

Кожен додаток може мати свою власну налаштовану сторінку реєстрації, сторінку входу та більше. Коренева сторінка входу /login (наприклад, https://door.casdoor.com/login) є сторінкою входу лише для вбудованого додатку Casdoor: app-built-in.

Додаток є "порталом" або "інтерфейсом" для входу користувача в Casdoor. Користувач повинен пройти через сторінку входу одного додатку, щоб увійти в Casdoor.

ДодатокURL-адреса сторінки реєстраціїURL-адреса сторінки входу
app-built-inhttps://door.casdoor.com/signuphttps://door.casdoor.com/login
app-casnodehttps://door.casdoor.com/signup/app-casnodehttps://door.casdoor.com/login/oauth/authorize?client_id=014ae4bd048734ca2dea&response_type=code&redirect_uri=http://localhost:9000/callback&scope=read&state=casdoor
app-casbin-oahttps://door.casdoor.com/signup/app-casbin-oahttps://door.casdoor.com/login/oauth/authorize?client_id=0ba528121ea87b3eb54d&response_type=code&redirect_uri=http://localhost:9000/callback&scope=read&state=casdoor

URL-адреси для входу

Дуже легко увійти в Casdoor через вбудований додаток Casdoor; просто відвідайте домашню сторінку сервера Casdoor (наприклад, https://door.casdoor.com для демонстраційного сайту), і вона автоматично перенаправить вас на /login. Але як отримати URL-адреси для інших додатків у фронтенді та бекенді? Ви можете або вручну конкатенувати рядки, або викликати деякі утилітні функції, надані SDK Casdoor, щоб отримати URL-адреси:

1. Вручну конкатенувати рядки

  • URL-адреса сторінки реєстрації
    • Реєстрація для вказаного додатку: <your-casdoor-hostname>/signup/<your-application-name>
    • Реєстрація через OAuth: <your-casdoor-hostname>/signup/oauth/authorize?client_id=<client-id-for-your-application>&response_type=code&redirect_uri=<redirect-uri-for-your-application>&&scope=read&state=casdoor
    • Автоматична реєстрація: <your-casdoor-hostname>/auto-signup/oauth/authorize?client_id=<client-id-for-your-application>&response_type=code&redirect_uri=<redirect-uri-for-your-application>&&scope=read&state=casdoor
  • URL-адреса сторінки входу
    • Вхід для вказаної організації: <your-casdoor-hostname>/login/<your-organization-name>
    • Вхід через OAuth: <your-casdoor-hostname>/login/oauth/authorize?client_id=<client-id-for-your-application>&response_type=code&redirect_uri=<redirect-uri-for-your-application>&&scope=read&state=casdoor

2. Використання фронтенд SDK (для фронтенд JavaScript коду, що використовує React, Vue або Angular)

getSignupUrl() та getSigninUrl(): casdoor-js-sdk

3. Використання бекенд SDK (для бекенд коду, що використовує Go, Java тощо)

GetSignupUrl() та GetSigninUrl(): casdoor-go-sdk

Провайдер

Casdoor - це федеративна система єдиного входу, яка підтримує кілька провайдерів ідентичності через OIDC, OAuth та SAML. Casdoor також може надсилати коди підтвердження або інші повідомлення користувачам через електронну пошту або SMS. Casdoor використовує поняття Провайдер для управління всіма цими сторонніми конекторами.

Список усіх провайдерів, підтримуваних Casdoor, можна знайти за адресою provider/overview.

type Provider struct {
Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
Name string `xorm:"varchar(100) notnull pk" json:"name"`
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`

DisplayName string `xorm:"varchar(100)" json:"displayName"`
Category string `xorm:"varchar(100)" json:"category"`
Type string `xorm:"varchar(100)" json:"type"`
Method string `xorm:"varchar(100)" json:"method"`
ClientId string `xorm:"varchar(100)" json:"clientId"`
ClientSecret string `xorm:"varchar(100)" json:"clientSecret"`
ClientId2 string `xorm:"varchar(100)" json:"clientId2"`
ClientSecret2 string `xorm:"varchar(100)" json:"clientSecret2"`

Host string `xorm:"varchar(100)" json:"host"`
Port int `json:"port"`
Title string `xorm:"varchar(100)" json:"title"`
Content string `xorm:"varchar(1000)" json:"content"`

RegionId string `xorm:"varchar(100)" json:"regionId"`
SignName string `xorm:"varchar(100)" json:"signName"`
TemplateCode string `xorm:"varchar(100)" json:"templateCode"`
AppId string `xorm:"varchar(100)" json:"appId"`

Endpoint string `xorm:"varchar(1000)" json:"endpoint"`
IntranetEndpoint string `xorm:"varchar(100)" json:"intranetEndpoint"`
Domain string `xorm:"varchar(100)" json:"domain"`
Bucket string `xorm:"varchar(100)" json:"bucket"`

Metadata string `xorm:"mediumtext" json:"metadata"`
IdP string `xorm:"mediumtext" json:"idP"`
IssuerUrl string `xorm:"varchar(100)" json:"issuerUrl"`
EnableSignAuthnRequest bool `json:"enableSignAuthnRequest"`

ProviderUrl string `xorm:"varchar(200)" json:"providerUrl"`
}

Як Casdoor керує самим собою?

Після першого запуску Casdoor створюються деякі вбудовані об'єкти для полегшення його управління:

  • Вбудована організація з назвою built-in.
  • Користувач з назвою admin в організації built-in.
  • Вбудований додаток з назвою app-built-in, адмініструється організацією built-in, представляє сам Casdoor.

Усі користувачі під організацією built-in, включаючи admin, матимуть повні адміністративні привілеї на платформі Casdoor. Тому, якщо є кілька адміністраторів, рекомендується створити нові облікові записи під організацією built-in. Альтернативно, канал реєстрації для додатку app-built-in слід закрити, щоб запобігти небажаному доступу.

обережно

Неможливо перейменувати або видалити вбудовані об'єкти через веб-інтерфейс або RESTful API. Casdoor закодував ці зарезервовані імена в багатьох місцях; спроба перейменувати або видалити їх, змінюючи БД, може призвести до збою всієї системи.