跳到主内容

核心概念

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。

提示

对于单组织应用,请使用而非<organization_name>/作为用户 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/signuphttps://door.casdoor.com/login
casnode论坛系统https://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
casbin的OA系统https://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 服务器 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重命名或删除。 它们的名称是硬编码的;在数据库中更改或删除它们可能会导致系统崩溃。 :::