核心概念
Casdoor围绕四个核心概念构建:组织, 用户, 应用,以及提供商。 了解这些内容将帮助您有效配置和操作Casdoor。
:::提示 本节中的示例使用演示站点https://door.casdoor.com。
:::
组织
组织是用户和应用程序的容器——例如,一家公司的员工或一个产品的客户。 代码中的组织结构如下:
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"`
}
用户
A用户可以登录应用程序。 每位用户仅属于一个组织,但可以登录该组织中的任意应用。 Casdoor拥有两种用户类型:
- 内置用户(例如:
内置/admin):对Casdoor实例拥有完全控制权的全局管理员。 - 组织用户(例如:
my-company/alice):可注册、登录、登出并管理自身个人资料的普通用户。
在API中,用户被标识为<organization_name>/<username>。 默认管理员是内置/admin。 用户结构还包含一个id字段(例如,UUID:d835a48f-2e88-4c1f-b907-60ac6b6c1b40),应用程序可将其用作稳定的用户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进行身份验证的Web服务——例如,论坛、内部OA系统或CRM。
type Application struct { 所有者 string `xorm:"varchar(100) notnull pk" json:"owner"` 名称 string `xorm:"varchar(100) notnull pk" json:"name"` 创建时间 string `xorm:"varchar(100)" json:"createdTime"` 显示名称 字符串 `xorm:"varchar(100)" json:"displayName"` Logo 字符串 `xorm:"varchar(100)" json:"logo"` 主页网址 字符串 `xorm:"varchar(100)" json:"homepageUrl"` 描述 字符串 `xorm:"varchar(100)" json:"description"` 组织 string `xorm:"varchar(100)" json:"organization"` 证书 string `xorm:"varchar(100)" json:"cert"` 启用密码 bool `json:"enablePassword"` 启用注册 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 字符串 `xorm:"varchar(100)" json:"tokenFormat"` ExpireInHours 整数 `json:"expireInHours"` RefreshExpireInHours 整数 `json:"refreshExpireInHours"` SignupUrl 字符串 `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(200)" json:"termsOfUse"` SignupHtml string `xorm:"mediumtext" json:"signupHtml"` SigninHtml string `xorm:"mediumtext" json:"signinHtml"` }
每个应用都可以拥有自己的注册和登录页面。 根路径/login</code>(例如https://door.casdoor.com/login) 是 Casdoor 内置应用``app-built-in.
应用是用户登录Casdoor的入口;用户始终通过应用的登录页面进行登录。
| 应用程序 | 注册页面URL | 登录页面URL |
|---|---|---|
| 内置应用程序 | https://door.casdoor.com/signup | https://door.casdoor.com/login |
| casnode论坛系统 | https://door.casdoor.com/signup/app-casnode | https://door.casdoor.com/login/oauth/authorize?client_id=014ae4bd048734ca2dea&response_type=code&redirect_uri=http://localhost:9000/callback&scope=read&state=casdoor |
| casbin的OA系统 | https://door.casdoor.com/signup/app-casbin-oa | https://door.casdoor.com/login/oauth/authorize?client_id=0ba528121ea87b3eb54d&response_type=code&redirect_uri=http://localhost:9000/callback&scope=read&state=casdoor |
登录 URL
通过内置应用程序登录非常简单:打开 Casdoor 服务器 URL(例如:https://door.casdoor.com),您将被重定向到 /login。 对于其他应用,可通过两种方式构建登录和注册URL:
1. 手动构建URL
- 注册
- 按应用:
<casdoor-host>/signup/<application-name> - 通过 OAuth:
<casdoor-host>/signup/oauth/authorize?client_id=<client-id>&response_type=code&redirect_uri=<redirect-uri>&作用域=读取&状态=Casdoor - 自动注册:
<casdoor-host>/auto-signup/oauth/authorize?client_id=<client-id>&response_type=code&redirect_uri=<redirect-uri>&作用域=读取&状态=Casdoor
- 按应用:
- 登录
- 按组织:
<casdoor-host>/login/<organization-name> - 通过 OAuth:
<casdoor-host>/login/oauth/authorize?client_id=<client-id>&response_type=code&redirect_uri=<redirect-uri>&作用域=读取&状态=Casdoor
- 按组织:
2. 前端SDK(React、Vue、Angular)
使用casdoor-js-sdk中的getSignupUrl()和getSigninUrl()。
3. 后端SDK(Go、Java等)
使用casdoor-go-sdk中的GetSignupUrl()和GetSigninUrl()。
提供商
Casdoor 作为联合单点登录平台:它支持多种身份提供商(OIDC、OAuth、SAML),并可通过电子邮件或短信发送验证码和通知。 所有此类集成均表示为提供商。
查看**提供商概览**以获取受支持的提供商类型完整列表。
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会创建默认对象:
- 组织:
内置 - 用户:
admin在内置 - 应用:
应用内置(Casdoor UI),由内置拥有
内置组织中的所有用户(包括管理员)均拥有完全管理员权限。 对于多名管理员,请在内置</code>下创建其他账户,或禁用应用内置的注册功能,以避免出现不需要的账户。
:::注意 内置组织admin</code>用户以及应用内置应用程序****无法通过UI或API重命名或删除。 它们的名称是硬编码的;在数据库中更改或删除它们可能会导致系统崩溃。
:::