ข้ามไปยังเนื้อหาหลัก

แนวคิดหลัก

ในฐานะผู้ดูแลระบบ Casdoor, คุณควรคุ้นเคยกับแนวคิดหลักอย่างน้อยสี่ประการ: Organization, User, Application, และ Provider.

เคล็ดลับ

ในส่วนต่อไปนี้, เราจะใช้เว็บไซต์ตัวอย่าง https://door.casdoor.com เป็นตัวอย่าง.

องค์กร

ใน Casdoor, องค์กรคือตัวบรรจุสำหรับผู้ใช้และแอปพลิเคชัน. ตัวอย่างเช่น, พนักงานทั้งหมดของบริษัทหรือลูกค้าทั้งหมดของธุรกิจสามารถถูกสรุปเป็นองค์กรหนึ่งได้. คำนิยามคลาส Organization แสดงด้านล่าง:

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. นอกจากนี้, คำนิยามคลาส User รวมถึงคุณสมบัติ id, ซึ่งเป็น UUID เช่น d835a48f-2e88-4c1f-b907-60ac6b6c1b40 และสามารถเลือกเป็น ID ของผู้ใช้โดยแอปพลิเคชัน.

เคล็ดลับ

สำหรับแอปพลิเคชันที่เป็นขององค์กรเพียงองค์กรเดียว, มันเป็นไปได้ที่จะใช้ <username> แทน <organization_name>/<username> เป็น ID ของผู้ใช้ในแอปพลิเคชันเพื่อความง่ายดาย.

นี่คือคำนิยามคลาส User:

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 สำหรับแอปพลิเคชันอื่นๆ ในโค้ดฝั่งหน้าบ้านและฝั่งหลังบ้านได้อย่างไร? คุณสามารถเชื่อมต่อสตริงด้วยตนเองหรือเรียกใช้ฟังก์ชันยูทิลิตี้บางอย่างที่ Casdoor SDKs ให้มาเพื่อรับ 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 ใช้แนวคิดของ Provider เพื่อจัดการกับตัวเชื่อมต่อบุคคลที่สามทั้งหมดเหล่านี้.

รายการของผู้ให้บริการทั้งหมดที่ 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 เพื่อป้องกันการเข้าถึงที่ไม่ต้องการ.

คำเตือน

ไม่สามารถเปลี่ยนชื่อหรือลบวัตถุที่มีตั้งแต่แรกผ่านทางเว็บ UI หรือ API แบบ RESTful. Casdoor ได้เขียนชื่อที่สงวนไว้เหล่านี้ไว้ในหลายๆ ที่; การพยายามเปลี่ยนชื่อหรือลบพวกมันโดยการแก้ไขฐานข้อมูลอาจทำให้ระบบทั้งหมดล่ม.