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

แนวคิดหลัก

ในฐานะผู้ดูแลระบบ 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"`
}
เคล็ดลับ

The Properties field is a flexible key-value map for storing custom user attributes. See the User Properties documentation for detailed usage examples and best practices.

แอปพลิเคชัน

แอปพลิเคชันแอปพลิเคชัน แทนบริการเว็บที่ต้องการการป้องกันโดย 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 ได้เขียนชื่อที่สงวนไว้เหล่านี้ไว้ในหลายๆ ที่; การพยายามเปลี่ยนชื่อหรือลบพวกมันโดยการแก้ไขฐานข้อมูลอาจทำให้ระบบทั้งหมดล่ม.