核心概念

作为Casdoor的管理员,您至少应该熟悉4个核心概念: 组织用户, 应用提供商

在以下部分,我们将使用演示站点:https://door.casbin.com作为例子。 ::: :::

组织

在Casdoor中, 组织是用户和应用程序的容器。 例如,一个公司的所有雇员或一个企业的所有客户都可以组成一个组织。 组织的类别定义如下:

  1. type Organization struct {
  2. Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
  3. Name string `xorm:"varchar(100) notnull pk" json:"name"`
  4. CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
  5. DisplayName string `xorm:"varchar(100)" json:"displayName"`
  6. WebsiteUrl string `xorm:"varchar(100)" json:"websiteUrl"`
  7. Favicon string `xorm:"varchar(100)" json:"favicon"`
  8. PasswordType string `xorm:"varchar(100)" json:"passwordType"`
  9. PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"`
  10. PhonePrefix string `xorm:"varchar(10)" json:"phonePrefix"`
  11. DefaultAvatar string `xorm:"varchar(100)" json:"defaultAvatar"`
  12. MasterPassword string `xorm:"varchar(100)" json:"masterPassword"`
  13. EnableSoftDeletion bool `json:"enableSoftDeletion"`
  14. }

用户

Casdoor 中的用户可以登录到一个应用程序。 一个用户只能属于一个组织,但可以登录到该组织拥有的多个应用程序。 Casdoor目前有两种类型的用户:

  • 内置 组织下的用户,例如 内置/管理员:全局管理员,在Casdoor平台上拥有完整的管理员权限。
  • 其他组织下的用户,如 我的同伴/Alice:普通用户,只能注册、注册、登出、更改他/她自己的个人资料等。

在 Casdoor API中,用户通常被定义为 <组织名>/<用户名>, e..,Casdoor的默认管理员被定义为 内置管理员 用户名权限中有一个名为 id的属性, 这是一个类似d835a48f-2e88-4c1f-b907-60ac6b6c1b40的 UUID ,它也可以是用户通过一个应用程序选择的 ID。

组织的类别定义如下:

  1. type User struct {
  2. Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
  3. Name string `xorm:"varchar(100) notnull pk" json:"name"`
  4. CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
  5. UpdatedTime string `xorm:"varchar(100)" json:"updatedTime"`
  6. Id string `xorm:"varchar(100)" json:"id"`
  7. Type string `xorm:"varchar(100)" json:"type"`
  8. Password string `xorm:"varchar(100)" json:"password"`
  9. PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"`
  10. DisplayName string `xorm:"varchar(100)" json:"displayName"`
  11. Avatar string `xorm:"varchar(500)" json:"avatar"`
  12. PermanentAvatar string `xorm:"varchar(500)" json:"permanentAvatar"`
  13. Email string `xorm:"varchar(100) index" json:"email"`
  14. Phone string `xorm:"varchar(100) index" json:"phone"`
  15. Location string `xorm:"varchar(100)" json:"location"`
  16. Address []string `json:"address"`
  17. Affiliation string `xorm:"varchar(100)" json:"affiliation"`
  18. Title string `xorm:"varchar(100)" json:"title"`
  19. IdCardType string `xorm:"varchar(100)" json:"idCardType"`
  20. IdCard string `xorm:"varchar(100) index" json:"idCard"`
  21. Homepage string `xorm:"varchar(100)" json:"homepage"`
  22. Bio string `xorm:"varchar(100)" json:"bio"`
  23. Tag string `xorm:"varchar(100)" json:"tag"`
  24. Region string `xorm:"varchar(100)" json:"region"`
  25. Language string `xorm:"varchar(100)" json:"language"`
  26. Gender string `xorm:"varchar(100)" json:"gender"`
  27. Birthday string `xorm:"varchar(100)" json:"birthday"`
  28. Education string `xorm:"varchar(100)" json:"education"`
  29. Score int `json:"score"`
  30. Ranking int `json:"ranking"`
  31. IsDefaultAvatar bool `json:"isDefaultAvatar"`
  32. IsOnline bool `json:"isOnline"`
  33. IsAdmin bool `json:"isAdmin"`
  34. IsGlobalAdmin bool `json:"isGlobalAdmin"`
  35. IsForbidden bool `json:"isForbidden"`
  36. IsDeleted bool `json:"isDeleted"`
  37. SignupApplication string `xorm:"varchar(100)" json:"signupApplication"`
  38. Hash string `xorm:"varchar(100)" json:"hash"`
  39. PreHash string `xorm:"varchar(100)" json:"preHash"`
  40. CreatedIp string `xorm:"varchar(100)" json:"createdIp"`
  41. LastSigninTime string `xorm:"varchar(100)" json:"lastSigninTime"`
  42. LastSigninIp string `xorm:"varchar(100)" json:"lastSigninIp"`
  43. Github string `xorm:"varchar(100)" json:"github"`
  44. Google string `xorm:"varchar(100)" json:"google"`
  45. QQ string `xorm:"qq varchar(100)" json:"qq"`
  46. WeChat string `xorm:"wechat varchar(100)" json:"wechat"`
  47. Facebook string `xorm:"facebook varchar(100)" json:"facebook"`
  48. DingTalk string `xorm:"dingtalk varchar(100)" json:"dingtalk"`
  49. Weibo string `xorm:"weibo varchar(100)" json:"weibo"`
  50. Gitee string `xorm:"gitee varchar(100)" json:"gitee"`
  51. LinkedIn string `xorm:"linkedin varchar(100)" json:"linkedin"`
  52. Wecom string `xorm:"wecom varchar(100)" json:"wecom"`
  53. Lark string `xorm:"lark varchar(100)" json:"lark"`
  54. Gitlab string `xorm:"gitlab varchar(100)" json:"gitlab"`
  55. Apple string `xorm:"apple varchar(100)" json:"apple"`
  56. AzureAD string `xorm:"azuread varchar(100)" json:"azuread"`
  57. Slack string `xorm:"slack varchar(100)" json:"slack"`
  58. Ldap string `xorm:"ldap varchar(100)" json:"ldap"`
  59. Properties map[string]string `json:"properties"`
  60. }

应用程序

应用程序是指需要受Casdoor保护的网络服务。 例如,论坛网站、OA系统、CRM系统都属于应用程序。

  1. type Application struct {
  2. Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
  3. Name string `xorm:"varchar(100) notnull pk" json:"name"`
  4. CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
  5. DisplayName string `xorm:"varchar(100)" json:"displayName"`
  6. Logo string `xorm:"varchar(100)" json:"logo"`
  7. HomepageUrl string `xorm:"varchar(100)" json:"homepageUrl"`
  8. Description string `xorm:"varchar(100)" json:"description"`
  9. Organization string `xorm:"varchar(100)" json:"organization"`
  10. Cert string `xorm:"varchar(100)" json:"cert"`
  11. EnablePassword bool `json:"enablePassword"`
  12. EnableSignUp bool `json:"enableSignUp"`
  13. EnableSigninSession bool `json:"enableSigninSession"`
  14. EnableCodeSignin bool `json:"enableCodeSignin"`
  15. Providers []*ProviderItem `xorm:"mediumtext" json:"providers"`
  16. SignupItems []*SignupItem `xorm:"varchar(1000)" json:"signupItems"`
  17. OrganizationObj *Organization `xorm:"-" json:"organizationObj"`
  18. ClientId string `xorm:"varchar(100)" json:"clientId"`
  19. ClientSecret string `xorm:"varchar(100)" json:"clientSecret"`
  20. RedirectUris []string `xorm:"varchar(1000)" json:"redirectUris"`
  21. TokenFormat string `xorm:"varchar(100)" json:"tokenFormat"`
  22. ExpireInHours int `json:"expireInHours"`
  23. RefreshExpireInHours int `json:"refreshExpireInHours"`
  24. SignupUrl string `xorm:"varchar(200)" json:"signupUrl"`
  25. SigninUrl string `xorm:"varchar(200)" json:"signinUrl"`
  26. ForgetUrl string `xorm:"varchar(200)" json:"forgetUrl"`
  27. AffiliationUrl string `xorm:"varchar(100)" json:"affiliationUrl"`
  28. TermsOfUse string `xorm:"varchar(100)" json:"termsOfUse"`
  29. SignupHtml string `xorm:"mediumtext" json:"signupHtml"`
  30. SigninHtml string `xorm:"mediumtext" json:"signinHtml"`
  31. }

每个应用程序都可以有自己的自定义注册页面,登录页等。 例如,根登录页面 /登录 (例如:https://door.casbin.com/login) 是只针对Casdoor的内置应用程序,在页面上的标志是: app-build-in

应用程序是用户登录到Casdoor的“入口”或“界面”。 用户需要通过一个应用程序的登录页面才能登录到Casdoor。

应用程序注册页面网址注册页面网址
内置应用程序https://do.casbin.com/signuphttps://do.casbin.com/login
casnode论坛系统https://do.casbin.com/signup/app-casnodehttps://door.casbin.com/login/oauth/authorize?client_id=014ae4bd048734ca2dea&response_type=code&redirect_uri=http://localhost:9000/callback&scope=read&state=casdoor
casbin的OA系统https://do.casbin.com/signup/app-casbinoahttps://door.casbin.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)。 用于演示站点的 asbin.com 将会自动重定向您为 /登录。 但如何在前端和后端代码中为其他应用程序获取这些URL? 您可以将您自己的字符串连接起来,也可以调用 Casdoor SDK 提供的一些实用功能来获取 URL:

1. 手动连接字符串:

  • 注册页面 URL: <your-casdoor-hostname>/signup/<your-application-name>
  • Sign in page URL: <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 (用于使用 React、Vue 或 Angular 的 Javascript 代码):

getSignupUrl() and getSigninUrl(): https://github.com/casdoor/casdoor-js-sdk/blob/3d08d726bcd5f62d6444b820596e2d8472f67d97/src/sdk.ts#L50-L63

3. 使用后端 SDK (使用Go Java 等后端代码):

GetSignupUrl() and GetSigninUrl(): https://github.com/casdoor/casdoor-go-sdk/blob/f3ef1adff792e9a06af5682e0a3af9436ed24ed3/auth/url.go#L23-L39

提供商

Casdoor是一个联合单点登录系统,通过OIDC、OAuth 和SAML支持多个身份提供者。 Casdoor 也可以通过电子邮件或短信(快速消息服务)向用户发送验证码或其他通知。 Casdoor 使用这个概念: 提供商 来管理所有这些第三方连接器。

目前,Casdoor支持的所有提供者都可以在这里找到: /docs/provider/overview

  1. type Provider struct {
  2. Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
  3. Name string `xorm:"varchar(100) notnull pk" json:"name"`
  4. CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
  5. DisplayName string `xorm:"varchar(100)" json:"displayName"`
  6. Category string `xorm:"varchar(100)" json:"category"`
  7. Type string `xorm:"varchar(100)" json:"type"`
  8. Method string `xorm:"varchar(100)" json:"method"`
  9. ClientId string `xorm:"varchar(100)" json:"clientId"`
  10. ClientSecret string `xorm:"varchar(100)" json:"clientSecret"`
  11. ClientId2 string `xorm:"varchar(100)" json:"clientId2"`
  12. ClientSecret2 string `xorm:"varchar(100)" json:"clientSecret2"`
  13. Host string `xorm:"varchar(100)" json:"host"`
  14. Port int `json:"port"`
  15. Title string `xorm:"varchar(100)" json:"title"`
  16. Content string `xorm:"varchar(1000)" json:"content"`
  17. RegionId string `xorm:"varchar(100)" json:"regionId"`
  18. SignName string `xorm:"varchar(100)" json:"signName"`
  19. TemplateCode string `xorm:"varchar(100)" json:"templateCode"`
  20. AppId string `xorm:"varchar(100)" json:"appId"`
  21. Endpoint string `xorm:"varchar(1000)" json:"endpoint"`
  22. IntranetEndpoint string `xorm:"varchar(100)" json:"intranetEndpoint"`
  23. Domain string `xorm:"varchar(100)" json:"domain"`
  24. Bucket string `xorm:"varchar(100)" json:"bucket"`
  25. Metadata string `xorm:"mediumtext" json:"metadata"`
  26. IdP string `xorm:"mediumtext" json:"idP"`
  27. IssuerUrl string `xorm:"varchar(100)" json:"issuerUrl"`
  28. EnableSignAuthnRequest bool `json:"enableSignAuthnRequest"`
  29. ProviderUrl string `xorm:"varchar(200)" json:"providerUrl"`
  30. }

Casdoor是如何自我管理的?

当您首次运行Casdoor时,Casdoor将创建一些内置的对象来帮助管理员管理Casdoor本身:

  • 一个内置的命名为 内置 的组织。
  • 用户名为 管理员 内置 组织。
  • 一个内置的应用程序名为 应用程序内置, 由 内置的 组织所拥有,代表Casdoor 本身(实际上也是一个应用程序)。

内置的 组织中的所有用户,包括 管理员 默认情况下将在Casdoor平台上拥有完整的管理员权限。 所以,如果你有多个管理员,然后在 内置的 机构下创建新帐户。 否则,请记住关闭 应用程序内置的 应用程序的注册频道。

:::谨慎 内置对象已被禁止在网页界面或 RESTful API中重命名或删除。 Casdoor在许多地方硬编码了这些保留的名称。 不要试图重命名或删除它们,比如修改数据库,否则整个系统可能崩溃。 :::