Compare commits

..

19 Commits

Author SHA1 Message Date
DacongDA
e2e3c1fbb8 feat: support Product.SuccessUrl (#3908) 2025-06-26 22:52:07 +08:00
David
73915ac0a0 feat: fix issue that LDAP user address was not syncing (#3905) 2025-06-26 09:38:16 +08:00
Attack825
bf9d55ff40 feat: add InitCleanupTokens() (#3903) 2025-06-26 09:31:59 +08:00
XiangYe
b36fb50239 feat: fix check bug to allow logged-in users to buy product (#3897) 2025-06-25 10:49:20 +08:00
Øßfusion
4307baa759 feat: fix Tumblr OAuth's wrong scope (#3898) 2025-06-25 09:55:02 +08:00
David
3964bae1df feat: fix org's LDAP table wrong link (#3900) 2025-06-25 09:51:40 +08:00
Yang Luo
d9b97d70be feat: change CRLF to LF for some files 2025-06-24 09:55:00 +08:00
Attack825
ca224fdd4c feat: add group xlsx upload button (#3885) 2025-06-17 23:43:38 +08:00
千石
37daea2bbc feat: improve error message in ApplicationEditPage (#3886) 2025-06-17 20:06:52 +08:00
千石
af231bf946 feat: add FieldValidationFilter to check object names (#3877) 2025-06-17 16:11:35 +08:00
DacongDA
6dc7b4d533 feat: get-user API respects org's account item's view rules now (#3882) 2025-06-16 20:09:21 +08:00
DacongDA
12cc0f429e feat: remove support for Non trace verification for Alibaba cloud captcha verification (#3881) 2025-06-13 00:36:29 +08:00
DacongDA
8cc22dec91 feat: upgrade Alibaba cloud captcha provider from v1 to v2 (#3879) 2025-06-12 23:02:36 +08:00
千石
0c08ae5365 feat: Add support for email verification logic (#3875) 2025-06-11 19:17:16 +08:00
Yang Luo
c3485268d3 feat: fix "Display name cannot be empty" in /update-user API 2025-06-11 00:32:05 +08:00
Yang Luo
64a4956c42 feat: improve getMemoryUsage() 2025-06-09 20:08:55 +08:00
DacongDA
855bdf47e8 feat: fix memory usage in sysinfo page (#3870) 2025-06-09 00:31:34 +08:00
DacongDA
de7e322fbb feat: limit the width of the organization.hasPrivilegeConsent popconfirm (#3869) 2025-06-07 00:30:41 +08:00
DacongDA
4cb0cd7c5a feat: add Organization.HasPrivilegeConsent to block add-user API for the "built-in" org (#3864) 2025-06-06 23:05:01 +08:00
104 changed files with 2013 additions and 1351 deletions

View File

@@ -15,32 +15,51 @@
package captcha package captcha
import ( import (
"encoding/json" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
"errors" openapiutil "github.com/alibabacloud-go/openapi-util/service"
"fmt" teaUtil "github.com/alibabacloud-go/tea-utils/v2/service"
"io" "github.com/alibabacloud-go/tea/tea"
"net/http"
"net/url"
"sort"
"strconv"
"strings"
"time"
"github.com/casdoor/casdoor/util"
) )
const AliyunCaptchaVerifyUrl = "http://afs.aliyuncs.com" const AliyunCaptchaVerifyUrl = "captcha.cn-shanghai.aliyuncs.com"
type captchaSuccessResponse struct { type VerifyCaptchaRequest struct {
Code int `json:"Code"` CaptchaVerifyParam *string `json:"CaptchaVerifyParam,omitempty" xml:"CaptchaVerifyParam,omitempty"`
Msg string `json:"Msg"` SceneId *string `json:"SceneId,omitempty" xml:"SceneId,omitempty"`
} }
type captchaFailResponse struct { type VerifyCaptchaResponseBodyResult struct {
Code string `json:"Code"` VerifyResult *bool `json:"VerifyResult,omitempty" xml:"VerifyResult,omitempty"`
Message string `json:"Message"`
} }
type VerifyCaptchaResponseBody struct {
Code *string `json:"Code,omitempty" xml:"Code,omitempty"`
Message *string `json:"Message,omitempty" xml:"Message,omitempty"`
// Id of the request
RequestId *string `json:"RequestId,omitempty" xml:"RequestId,omitempty"`
Result *VerifyCaptchaResponseBodyResult `json:"Result,omitempty" xml:"Result,omitempty" type:"Struct"`
Success *bool `json:"Success,omitempty" xml:"Success,omitempty"`
}
type VerifyIntelligentCaptchaResponseBodyResult struct {
VerifyCode *string `json:"VerifyCode,omitempty" xml:"VerifyCode,omitempty"`
VerifyResult *bool `json:"VerifyResult,omitempty" xml:"VerifyResult,omitempty"`
}
type VerifyIntelligentCaptchaResponseBody struct {
Code *string `json:"Code,omitempty" xml:"Code,omitempty"`
Message *string `json:"Message,omitempty" xml:"Message,omitempty"`
// Id of the request
RequestId *string `json:"RequestId,omitempty" xml:"RequestId,omitempty"`
Result *VerifyIntelligentCaptchaResponseBodyResult `json:"Result,omitempty" xml:"Result,omitempty" type:"Struct"`
Success *bool `json:"Success,omitempty" xml:"Success,omitempty"`
}
type VerifyIntelligentCaptchaResponse struct {
Headers map[string]*string `json:"headers,omitempty" xml:"headers,omitempty" require:"true"`
StatusCode *int32 `json:"statusCode,omitempty" xml:"statusCode,omitempty" require:"true"`
Body *VerifyIntelligentCaptchaResponseBody `json:"body,omitempty" xml:"body,omitempty" require:"true"`
}
type AliyunCaptchaProvider struct{} type AliyunCaptchaProvider struct{}
func NewAliyunCaptchaProvider() *AliyunCaptchaProvider { func NewAliyunCaptchaProvider() *AliyunCaptchaProvider {
@@ -48,68 +67,69 @@ func NewAliyunCaptchaProvider() *AliyunCaptchaProvider {
return captcha return captcha
} }
func contentEscape(str string) string { func (captcha *AliyunCaptchaProvider) VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error) {
str = strings.Replace(str, " ", "%20", -1) config := &openapi.Config{}
str = url.QueryEscape(str)
return str
}
func (captcha *AliyunCaptchaProvider) VerifyCaptcha(token, clientSecret string) (bool, error) { config.Endpoint = tea.String(AliyunCaptchaVerifyUrl)
pathData, err := url.ParseQuery(token) config.ConnectTimeout = tea.Int(5000)
config.ReadTimeout = tea.Int(5000)
config.AccessKeyId = tea.String(clientId)
config.AccessKeySecret = tea.String(clientSecret)
client := new(openapi.Client)
err := client.Init(config)
if err != nil { if err != nil {
return false, err return false, err
} }
pathData["Action"] = []string{"AuthenticateSig"} request := VerifyCaptchaRequest{CaptchaVerifyParam: tea.String(token), SceneId: tea.String(clientId2)}
pathData["Format"] = []string{"json"}
pathData["SignatureMethod"] = []string{"HMAC-SHA1"}
pathData["SignatureNonce"] = []string{strconv.FormatInt(time.Now().UnixNano(), 10)}
pathData["SignatureVersion"] = []string{"1.0"}
pathData["Timestamp"] = []string{time.Now().UTC().Format("2006-01-02T15:04:05Z")}
pathData["Version"] = []string{"2018-01-12"}
var keys []string err = teaUtil.ValidateModel(&request)
for k := range pathData {
keys = append(keys, k)
}
sort.Strings(keys)
sortQuery := ""
for _, k := range keys {
sortQuery += k + "=" + contentEscape(pathData[k][0]) + "&"
}
sortQuery = strings.TrimSuffix(sortQuery, "&")
stringToSign := fmt.Sprintf("GET&%s&%s", url.QueryEscape("/"), url.QueryEscape(sortQuery))
signature := util.GetHmacSha1(clientSecret+"&", stringToSign)
resp, err := http.Get(fmt.Sprintf("%s?%s&Signature=%s", AliyunCaptchaVerifyUrl, sortQuery, url.QueryEscape(signature)))
if err != nil { if err != nil {
return false, err return false, err
} }
defer resp.Body.Close() runtime := &teaUtil.RuntimeOptions{}
body, err := io.ReadAll(resp.Body)
body := map[string]interface{}{}
if !tea.BoolValue(teaUtil.IsUnset(request.CaptchaVerifyParam)) {
body["CaptchaVerifyParam"] = request.CaptchaVerifyParam
}
if !tea.BoolValue(teaUtil.IsUnset(request.SceneId)) {
body["SceneId"] = request.SceneId
}
req := &openapi.OpenApiRequest{
Body: openapiutil.ParseToMap(body),
}
params := &openapi.Params{
Action: tea.String("VerifyIntelligentCaptcha"),
Version: tea.String("2023-03-05"),
Protocol: tea.String("HTTPS"),
Pathname: tea.String("/"),
Method: tea.String("POST"),
AuthType: tea.String("AK"),
Style: tea.String("RPC"),
ReqBodyType: tea.String("formData"),
BodyType: tea.String("json"),
}
res := &VerifyIntelligentCaptchaResponse{}
resBody, err := client.CallApi(params, req, runtime)
if err != nil { if err != nil {
return false, err return false, err
} }
return handleCaptchaResponse(body) err = tea.Convert(resBody, &res)
}
func handleCaptchaResponse(body []byte) (bool, error) {
captchaResp := &captchaSuccessResponse{}
err := json.Unmarshal(body, captchaResp)
if err != nil {
captchaFailResp := &captchaFailResponse{}
err = json.Unmarshal(body, captchaFailResp)
if err != nil { if err != nil {
return false, err return false, err
} }
return false, errors.New(captchaFailResp.Message) if res.Body.Result.VerifyResult != nil && *res.Body.Result.VerifyResult {
}
return true, nil return true, nil
}
return false, nil
} }

View File

@@ -23,6 +23,6 @@ func NewDefaultCaptchaProvider() *DefaultCaptchaProvider {
return captcha return captcha
} }
func (captcha *DefaultCaptchaProvider) VerifyCaptcha(token, clientSecret string) (bool, error) { func (captcha *DefaultCaptchaProvider) VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error) {
return object.VerifyCaptcha(clientSecret, token), nil return object.VerifyCaptcha(clientSecret, token), nil
} }

View File

@@ -35,7 +35,7 @@ func NewGEETESTCaptchaProvider() *GEETESTCaptchaProvider {
return captcha return captcha
} }
func (captcha *GEETESTCaptchaProvider) VerifyCaptcha(token, clientSecret string) (bool, error) { func (captcha *GEETESTCaptchaProvider) VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error) {
pathData, err := url.ParseQuery(token) pathData, err := url.ParseQuery(token)
if err != nil { if err != nil {
return false, err return false, err

View File

@@ -32,7 +32,7 @@ func NewHCaptchaProvider() *HCaptchaProvider {
return captcha return captcha
} }
func (captcha *HCaptchaProvider) VerifyCaptcha(token, clientSecret string) (bool, error) { func (captcha *HCaptchaProvider) VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error) {
reqData := url.Values{ reqData := url.Values{
"secret": {clientSecret}, "secret": {clientSecret},
"response": {token}, "response": {token},

View File

@@ -17,7 +17,7 @@ package captcha
import "fmt" import "fmt"
type CaptchaProvider interface { type CaptchaProvider interface {
VerifyCaptcha(token, clientSecret string) (bool, error) VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error)
} }
func GetCaptchaProvider(captchaType string) CaptchaProvider { func GetCaptchaProvider(captchaType string) CaptchaProvider {
@@ -43,11 +43,11 @@ func GetCaptchaProvider(captchaType string) CaptchaProvider {
return nil return nil
} }
func VerifyCaptchaByCaptchaType(captchaType, token, clientSecret string) (bool, error) { func VerifyCaptchaByCaptchaType(captchaType, token, clientId, clientSecret, clientId2 string) (bool, error) {
provider := GetCaptchaProvider(captchaType) provider := GetCaptchaProvider(captchaType)
if provider == nil { if provider == nil {
return false, fmt.Errorf("invalid captcha provider: %s", captchaType) return false, fmt.Errorf("invalid captcha provider: %s", captchaType)
} }
return provider.VerifyCaptcha(token, clientSecret) return provider.VerifyCaptcha(token, clientId, clientSecret, clientId2)
} }

View File

@@ -32,7 +32,7 @@ func NewReCaptchaProvider() *ReCaptchaProvider {
return captcha return captcha
} }
func (captcha *ReCaptchaProvider) VerifyCaptcha(token, clientSecret string) (bool, error) { func (captcha *ReCaptchaProvider) VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error) {
reqData := url.Values{ reqData := url.Values{
"secret": {clientSecret}, "secret": {clientSecret},
"response": {token}, "response": {token},

View File

@@ -32,7 +32,7 @@ func NewCloudflareTurnstileProvider() *CloudflareTurnstileProvider {
return captcha return captcha
} }
func (captcha *CloudflareTurnstileProvider) VerifyCaptcha(token, clientSecret string) (bool, error) { func (captcha *CloudflareTurnstileProvider) VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error) {
reqData := url.Values{ reqData := url.Values{
"secret": {clientSecret}, "secret": {clientSecret},
"response": {token}, "response": {token},

View File

@@ -259,7 +259,7 @@ func (c *ApiController) Signup() {
user.Groups = []string{application.DefaultGroup} user.Groups = []string{application.DefaultGroup}
} }
affected, err := object.AddUser(user) affected, err := object.AddUser(user, c.GetAcceptLanguage())
if err != nil { if err != nil {
c.ResponseError(err.Error()) c.ResponseError(err.Error())
return return

View File

@@ -504,6 +504,8 @@ func (c *ApiController) Login() {
c.ResponseError(fmt.Sprintf(c.T("verification:Phone number is invalid in your region %s"), authForm.CountryCode)) c.ResponseError(fmt.Sprintf(c.T("verification:Phone number is invalid in your region %s"), authForm.CountryCode))
return return
} }
} else if verificationCodeType == object.VerifyTypeEmail {
checkDest = authForm.Username
} }
// check result through Email or Phone // check result through Email or Phone
@@ -569,7 +571,7 @@ func (c *ApiController) Login() {
} }
var isHuman bool var isHuman bool
isHuman, err = captcha.VerifyCaptchaByCaptchaType(authForm.CaptchaType, authForm.CaptchaToken, authForm.ClientSecret) isHuman, err = captcha.VerifyCaptchaByCaptchaType(authForm.CaptchaType, authForm.CaptchaToken, captchaProvider.ClientId, authForm.ClientSecret, captchaProvider.ClientId2)
if err != nil { if err != nil {
c.ResponseError(err.Error()) c.ResponseError(err.Error())
return return
@@ -867,7 +869,7 @@ func (c *ApiController) Login() {
} }
var affected bool var affected bool
affected, err = object.AddUser(user) affected, err = object.AddUser(user, c.GetAcceptLanguage())
if err != nil { if err != nil {
c.ResponseError(err.Error()) c.ResponseError(err.Error())
return return

View File

@@ -0,0 +1,56 @@
// Copyright 2025 The Casdoor Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package controllers
import (
"fmt"
"os"
"github.com/casdoor/casdoor/object"
"github.com/casdoor/casdoor/util"
)
func (c *ApiController) UploadGroups() {
userId := c.GetSessionUsername()
owner, user := util.GetOwnerAndNameFromId(userId)
file, header, err := c.Ctx.Request.FormFile("file")
if err != nil {
c.ResponseError(err.Error())
return
}
fileId := fmt.Sprintf("%s_%s_%s", owner, user, util.RemoveExt(header.Filename))
path := util.GetUploadXlsxPath(fileId)
defer os.Remove(path)
err = saveFile(path, &file)
if err != nil {
c.ResponseError(err.Error())
return
}
affected, err := object.UploadGroups(owner, path)
if err != nil {
c.ResponseError(err.Error())
return
}
if affected {
c.ResponseOk()
} else {
c.ResponseError(c.T("general:Failed to import groups"))
}
}

View File

@@ -49,6 +49,6 @@ func (c *ApiController) UploadPermissions() {
if affected { if affected {
c.ResponseOk() c.ResponseOk()
} else { } else {
c.ResponseError(c.T("user_upload:Failed to import users")) c.ResponseError(c.T("general:Failed to import users"))
} }
} }

View File

@@ -182,7 +182,7 @@ func (c *ApiController) BuyProduct() {
paidUserName := c.Input().Get("userName") paidUserName := c.Input().Get("userName")
owner, _ := util.GetOwnerAndNameFromId(id) owner, _ := util.GetOwnerAndNameFromId(id)
userId := util.GetId(owner, paidUserName) userId := util.GetId(owner, paidUserName)
if paidUserName != "" && !c.IsAdmin() { if paidUserName != "" && paidUserName != c.GetSessionUsername() && !c.IsAdmin() {
c.ResponseError(c.T("general:Only admin user can specify user")) c.ResponseError(c.T("general:Only admin user can specify user"))
return return
} }

View File

@@ -49,6 +49,6 @@ func (c *ApiController) UploadRoles() {
if affected { if affected {
c.ResponseOk() c.ResponseOk()
} else { } else {
c.ResponseError(c.T("user_upload:Failed to import users")) c.ResponseError(c.T("general:Failed to import users"))
} }
} }

View File

@@ -197,8 +197,8 @@ func (c *ApiController) GetUser() {
return return
} }
if user != nil {
var organization *object.Organization var organization *object.Organization
if user != nil {
organization, err = object.GetOrganizationByUser(user) organization, err = object.GetOrganizationByUser(user)
if err != nil { if err != nil {
c.ResponseError(err.Error()) c.ResponseError(err.Error())
@@ -237,6 +237,14 @@ func (c *ApiController) GetUser() {
return return
} }
if organization != nil && user != nil {
user, err = object.GetFilteredUser(user, c.IsAdmin(), c.IsAdminOrSelf(user), organization.AccountItems)
if err != nil {
c.ResponseError(err.Error())
return
}
}
c.ResponseOk(user) c.ResponseOk(user)
} }
@@ -282,13 +290,6 @@ func (c *ApiController) UpdateUser() {
return return
} }
if c.Input().Get("allowEmpty") == "" {
if user.DisplayName == "" {
c.ResponseError(c.T("user:Display name cannot be empty"))
return
}
}
if user.MfaEmailEnabled && user.Email == "" { if user.MfaEmailEnabled && user.Email == "" {
c.ResponseError(c.T("user:MFA email is enabled but email is empty")) c.ResponseError(c.T("user:MFA email is enabled but email is empty"))
return return
@@ -310,7 +311,8 @@ func (c *ApiController) UpdateUser() {
} }
isAdmin := c.IsAdmin() isAdmin := c.IsAdmin()
if pass, err := object.CheckPermissionForUpdateUser(oldUser, &user, isAdmin, c.GetAcceptLanguage()); !pass { allowDisplayNameEmpty := c.Input().Get("allowEmpty") != ""
if pass, err := object.CheckPermissionForUpdateUser(oldUser, &user, isAdmin, allowDisplayNameEmpty, c.GetAcceptLanguage()); !pass {
c.ResponseError(err) c.ResponseError(err)
return return
} }
@@ -365,7 +367,7 @@ func (c *ApiController) AddUser() {
return return
} }
c.Data["json"] = wrapActionResponse(object.AddUser(&user)) c.Data["json"] = wrapActionResponse(object.AddUser(&user, c.GetAcceptLanguage()))
c.ServeJSON() c.ServeJSON()
} }

View File

@@ -67,6 +67,6 @@ func (c *ApiController) UploadUsers() {
if affected { if affected {
c.ResponseOk() c.ResponseOk()
} else { } else {
c.ResponseError(c.T("user_upload:Failed to import users")) c.ResponseError(c.T("general:Failed to import users"))
} }
} }

View File

@@ -160,7 +160,7 @@ func (c *ApiController) SendVerificationCode() {
if captchaProvider := captcha.GetCaptchaProvider(vform.CaptchaType); captchaProvider == nil { if captchaProvider := captcha.GetCaptchaProvider(vform.CaptchaType); captchaProvider == nil {
c.ResponseError(c.T("general:don't support captchaProvider: ") + vform.CaptchaType) c.ResponseError(c.T("general:don't support captchaProvider: ") + vform.CaptchaType)
return return
} else if isHuman, err := captchaProvider.VerifyCaptcha(vform.CaptchaToken, vform.ClientSecret); err != nil { } else if isHuman, err := captchaProvider.VerifyCaptcha(vform.CaptchaToken, provider.ClientId, vform.ClientSecret, provider.ClientId2); err != nil {
c.ResponseError(err.Error()) c.ResponseError(err.Error())
return return
} else if !isHuman { } else if !isHuman {
@@ -349,7 +349,7 @@ func (c *ApiController) VerifyCaptcha() {
return return
} }
isValid, err := provider.VerifyCaptcha(vform.CaptchaToken, vform.ClientSecret) isValid, err := provider.VerifyCaptcha(vform.CaptchaToken, captchaProvider.ClientId, vform.ClientSecret, captchaProvider.ClientId2)
if err != nil { if err != nil {
c.ResponseError(err.Error()) c.ResponseError(err.Error())
return return

2
go.mod
View File

@@ -7,6 +7,7 @@ require (
github.com/alexedwards/argon2id v0.0.0-20211130144151-3585854a6387 github.com/alexedwards/argon2id v0.0.0-20211130144151-3585854a6387
github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.4 github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.4
github.com/alibabacloud-go/facebody-20191230/v5 v5.1.2 github.com/alibabacloud-go/facebody-20191230/v5 v5.1.2
github.com/alibabacloud-go/openapi-util v0.1.0
github.com/alibabacloud-go/tea v1.3.2 github.com/alibabacloud-go/tea v1.3.2
github.com/alibabacloud-go/tea-utils/v2 v2.0.7 github.com/alibabacloud-go/tea-utils/v2 v2.0.7
github.com/aws/aws-sdk-go v1.45.5 github.com/aws/aws-sdk-go v1.45.5
@@ -90,7 +91,6 @@ require (
github.com/alibabacloud-go/darabonba-number v1.0.4 // indirect github.com/alibabacloud-go/darabonba-number v1.0.4 // indirect
github.com/alibabacloud-go/debug v1.0.1 // indirect github.com/alibabacloud-go/debug v1.0.1 // indirect
github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect
github.com/alibabacloud-go/openapi-util v0.1.0 // indirect
github.com/alibabacloud-go/openplatform-20191219/v2 v2.0.1 // indirect github.com/alibabacloud-go/openplatform-20191219/v2 v2.0.1 // indirect
github.com/alibabacloud-go/tea-fileform v1.1.1 // indirect github.com/alibabacloud-go/tea-fileform v1.1.1 // indirect
github.com/alibabacloud-go/tea-oss-sdk v1.1.3 // indirect github.com/alibabacloud-go/tea-oss-sdk v1.1.3 // indirect

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Failed to import users",
"Missing parameter": "Missing parameter", "Missing parameter": "Missing parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first", "Please login first": "Please login first",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Only admin can modify the %s.", "Only admin can modify the %s.": "Only admin can modify the %s.",
"The %s is immutable.": "The %s is immutable.", "The %s is immutable.": "The %s is immutable.",
"Unknown modify rule %s.": "Unknown modify rule %s." "Unknown modify rule %s.": "Unknown modify rule %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Display name cannot be empty", "Display name cannot be empty": "Display name cannot be empty",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "New password cannot contain blank space." "New password cannot contain blank space.": "New password cannot contain blank space.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Failed to import users"
}, },
"util": { "util": {
"No application is found for userId: %s": "No application is found for userId: %s", "No application is found for userId: %s": "No application is found for userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Nepodařilo se importovat uživatele",
"Missing parameter": "Chybějící parametr", "Missing parameter": "Chybějící parametr",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Prosím, přihlaste se nejprve", "Please login first": "Prosím, přihlaste se nejprve",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Pouze administrátor může upravit %s.", "Only admin can modify the %s.": "Pouze administrátor může upravit %s.",
"The %s is immutable.": "%s je neměnný.", "The %s is immutable.": "%s je neměnný.",
"Unknown modify rule %s.": "Neznámé pravidlo úpravy %s." "Unknown modify rule %s.": "Neznámé pravidlo úpravy %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "Oprávnění: \\\"%s\\\" neexistuje" "The permission: \\\"%s\\\" doesn't exist": "Oprávnění: \\\"%s\\\" neexistuje"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Zobrazované jméno nemůže být prázdné", "Display name cannot be empty": "Zobrazované jméno nemůže být prázdné",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "Nové heslo nemůže obsahovat prázdné místo." "New password cannot contain blank space.": "Nové heslo nemůže obsahovat prázdné místo.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Nepodařilo se importovat uživatele"
}, },
"util": { "util": {
"No application is found for userId: %s": "Pro userId: %s nebyla nalezena žádná aplikace", "No application is found for userId: %s": "Pro userId: %s nebyla nalezena žádná aplikace",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Fehler beim Importieren von Benutzern",
"Missing parameter": "Fehlender Parameter", "Missing parameter": "Fehlender Parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Bitte zuerst einloggen", "Please login first": "Bitte zuerst einloggen",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Nur der Administrator kann das %s ändern.", "Only admin can modify the %s.": "Nur der Administrator kann das %s ändern.",
"The %s is immutable.": "Das %s ist unveränderlich.", "The %s is immutable.": "Das %s ist unveränderlich.",
"Unknown modify rule %s.": "Unbekannte Änderungsregel %s." "Unknown modify rule %s.": "Unbekannte Änderungsregel %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Anzeigename darf nicht leer sein", "Display name cannot be empty": "Anzeigename darf nicht leer sein",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "Das neue Passwort darf keine Leerzeichen enthalten." "New password cannot contain blank space.": "Das neue Passwort darf keine Leerzeichen enthalten.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Fehler beim Importieren von Benutzern"
}, },
"util": { "util": {
"No application is found for userId: %s": "Es wurde keine Anwendung für die Benutzer-ID gefunden: %s", "No application is found for userId: %s": "Es wurde keine Anwendung für die Benutzer-ID gefunden: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Failed to import users",
"Missing parameter": "Missing parameter", "Missing parameter": "Missing parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first", "Please login first": "Please login first",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Only admin can modify the %s.", "Only admin can modify the %s.": "Only admin can modify the %s.",
"The %s is immutable.": "The %s is immutable.", "The %s is immutable.": "The %s is immutable.",
"Unknown modify rule %s.": "Unknown modify rule %s." "Unknown modify rule %s.": "Unknown modify rule %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Display name cannot be empty", "Display name cannot be empty": "Display name cannot be empty",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "New password cannot contain blank space." "New password cannot contain blank space.": "New password cannot contain blank space.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Failed to import users"
}, },
"util": { "util": {
"No application is found for userId: %s": "No application is found for userId: %s", "No application is found for userId: %s": "No application is found for userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Error al importar usuarios",
"Missing parameter": "Parámetro faltante", "Missing parameter": "Parámetro faltante",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Por favor, inicia sesión primero", "Please login first": "Por favor, inicia sesión primero",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Solo el administrador puede modificar los %s.", "Only admin can modify the %s.": "Solo el administrador puede modificar los %s.",
"The %s is immutable.": "El %s es inmutable.", "The %s is immutable.": "El %s es inmutable.",
"Unknown modify rule %s.": "Regla de modificación desconocida %s." "Unknown modify rule %s.": "Regla de modificación desconocida %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "El nombre de pantalla no puede estar vacío", "Display name cannot be empty": "El nombre de pantalla no puede estar vacío",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "La nueva contraseña no puede contener espacios en blanco." "New password cannot contain blank space.": "La nueva contraseña no puede contener espacios en blanco.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Error al importar usuarios"
}, },
"util": { "util": {
"No application is found for userId: %s": "No se encuentra ninguna aplicación para el Id de usuario: %s", "No application is found for userId: %s": "No se encuentra ninguna aplicación para el Id de usuario: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "عدم موفقیت در وارد کردن کاربران",
"Missing parameter": "پارامتر گمشده", "Missing parameter": "پارامتر گمشده",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "لطفاً ابتدا وارد شوید", "Please login first": "لطفاً ابتدا وارد شوید",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "فقط مدیر می‌تواند %s را تغییر دهد.", "Only admin can modify the %s.": "فقط مدیر می‌تواند %s را تغییر دهد.",
"The %s is immutable.": "%s غیرقابل تغییر است.", "The %s is immutable.": "%s غیرقابل تغییر است.",
"Unknown modify rule %s.": "قانون تغییر ناشناخته %s." "Unknown modify rule %s.": "قانون تغییر ناشناخته %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "نام نمایشی نمی‌تواند خالی باشد", "Display name cannot be empty": "نام نمایشی نمی‌تواند خالی باشد",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "رمز عبور جدید نمی‌تواند حاوی فاصله خالی باشد." "New password cannot contain blank space.": "رمز عبور جدید نمی‌تواند حاوی فاصله خالی باشد.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "عدم موفقیت در وارد کردن کاربران"
}, },
"util": { "util": {
"No application is found for userId: %s": "هیچ برنامه‌ای برای userId: %s یافت نشد", "No application is found for userId: %s": "هیچ برنامه‌ای برای userId: %s یافت نشد",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Failed to import users",
"Missing parameter": "Missing parameter", "Missing parameter": "Missing parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first", "Please login first": "Please login first",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Only admin can modify the %s.", "Only admin can modify the %s.": "Only admin can modify the %s.",
"The %s is immutable.": "The %s is immutable.", "The %s is immutable.": "The %s is immutable.",
"Unknown modify rule %s.": "Unknown modify rule %s." "Unknown modify rule %s.": "Unknown modify rule %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Display name cannot be empty", "Display name cannot be empty": "Display name cannot be empty",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "New password cannot contain blank space." "New password cannot contain blank space.": "New password cannot contain blank space.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Failed to import users"
}, },
"util": { "util": {
"No application is found for userId: %s": "No application is found for userId: %s", "No application is found for userId: %s": "No application is found for userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Échec de l'importation des utilisateurs",
"Missing parameter": "Paramètre manquant", "Missing parameter": "Paramètre manquant",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Veuillez d'abord vous connecter", "Please login first": "Veuillez d'abord vous connecter",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Seul l'administrateur peut modifier le %s.", "Only admin can modify the %s.": "Seul l'administrateur peut modifier le %s.",
"The %s is immutable.": "Le %s est immuable.", "The %s is immutable.": "Le %s est immuable.",
"Unknown modify rule %s.": "Règle de modification inconnue %s." "Unknown modify rule %s.": "Règle de modification inconnue %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Le nom d'affichage ne peut pas être vide", "Display name cannot be empty": "Le nom d'affichage ne peut pas être vide",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "Le nouveau mot de passe ne peut pas contenir d'espace." "New password cannot contain blank space.": "Le nouveau mot de passe ne peut pas contenir d'espace.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Échec de l'importation des utilisateurs"
}, },
"util": { "util": {
"No application is found for userId: %s": "Aucune application n'a été trouvée pour l'identifiant d'utilisateur : %s", "No application is found for userId: %s": "Aucune application n'a été trouvée pour l'identifiant d'utilisateur : %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Failed to import users",
"Missing parameter": "Missing parameter", "Missing parameter": "Missing parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first", "Please login first": "Please login first",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Only admin can modify the %s.", "Only admin can modify the %s.": "Only admin can modify the %s.",
"The %s is immutable.": "The %s is immutable.", "The %s is immutable.": "The %s is immutable.",
"Unknown modify rule %s.": "Unknown modify rule %s." "Unknown modify rule %s.": "Unknown modify rule %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Display name cannot be empty", "Display name cannot be empty": "Display name cannot be empty",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "New password cannot contain blank space." "New password cannot contain blank space.": "New password cannot contain blank space.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Failed to import users"
}, },
"util": { "util": {
"No application is found for userId: %s": "No application is found for userId: %s", "No application is found for userId: %s": "No application is found for userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Gagal mengimpor pengguna",
"Missing parameter": "Parameter hilang", "Missing parameter": "Parameter hilang",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Silahkan login terlebih dahulu", "Please login first": "Silahkan login terlebih dahulu",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Hanya admin yang dapat memodifikasi %s.", "Only admin can modify the %s.": "Hanya admin yang dapat memodifikasi %s.",
"The %s is immutable.": "%s tidak dapat diubah.", "The %s is immutable.": "%s tidak dapat diubah.",
"Unknown modify rule %s.": "Aturan modifikasi tidak diketahui %s." "Unknown modify rule %s.": "Aturan modifikasi tidak diketahui %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "Izin: \\\"%s\\\" tidak ada" "The permission: \\\"%s\\\" doesn't exist": "Izin: \\\"%s\\\" tidak ada"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Nama tampilan tidak boleh kosong", "Display name cannot be empty": "Nama tampilan tidak boleh kosong",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "Sandi baru tidak boleh mengandung spasi kosong." "New password cannot contain blank space.": "Sandi baru tidak boleh mengandung spasi kosong.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Gagal mengimpor pengguna"
}, },
"util": { "util": {
"No application is found for userId: %s": "Tidak ditemukan aplikasi untuk userId: %s", "No application is found for userId: %s": "Tidak ditemukan aplikasi untuk userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Failed to import users",
"Missing parameter": "Missing parameter", "Missing parameter": "Missing parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first", "Please login first": "Please login first",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Only admin can modify the %s.", "Only admin can modify the %s.": "Only admin can modify the %s.",
"The %s is immutable.": "The %s is immutable.", "The %s is immutable.": "The %s is immutable.",
"Unknown modify rule %s.": "Unknown modify rule %s." "Unknown modify rule %s.": "Unknown modify rule %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Display name cannot be empty", "Display name cannot be empty": "Display name cannot be empty",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "New password cannot contain blank space." "New password cannot contain blank space.": "New password cannot contain blank space.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Failed to import users"
}, },
"util": { "util": {
"No application is found for userId: %s": "No application is found for userId: %s", "No application is found for userId: %s": "No application is found for userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "ユーザーのインポートに失敗しました",
"Missing parameter": "不足しているパラメーター", "Missing parameter": "不足しているパラメーター",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "最初にログインしてください", "Please login first": "最初にログインしてください",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "管理者のみが%sを変更できます。", "Only admin can modify the %s.": "管理者のみが%sを変更できます。",
"The %s is immutable.": "%sは不変です。", "The %s is immutable.": "%sは不変です。",
"Unknown modify rule %s.": "未知の変更ルール%s。" "Unknown modify rule %s.": "未知の変更ルール%s。",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "表示名は空にできません", "Display name cannot be empty": "表示名は空にできません",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "新しいパスワードにはスペースを含めることはできません。" "New password cannot contain blank space.": "新しいパスワードにはスペースを含めることはできません。",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "ユーザーのインポートに失敗しました"
}, },
"util": { "util": {
"No application is found for userId: %s": "ユーザーIDに対するアプリケーションが見つかりません %s", "No application is found for userId: %s": "ユーザーIDに対するアプリケーションが見つかりません %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Failed to import users",
"Missing parameter": "Missing parameter", "Missing parameter": "Missing parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first", "Please login first": "Please login first",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Only admin can modify the %s.", "Only admin can modify the %s.": "Only admin can modify the %s.",
"The %s is immutable.": "The %s is immutable.", "The %s is immutable.": "The %s is immutable.",
"Unknown modify rule %s.": "Unknown modify rule %s." "Unknown modify rule %s.": "Unknown modify rule %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Display name cannot be empty", "Display name cannot be empty": "Display name cannot be empty",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "New password cannot contain blank space." "New password cannot contain blank space.": "New password cannot contain blank space.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Failed to import users"
}, },
"util": { "util": {
"No application is found for userId: %s": "No application is found for userId: %s", "No application is found for userId: %s": "No application is found for userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "사용자 가져오기를 실패했습니다",
"Missing parameter": "누락된 매개변수", "Missing parameter": "누락된 매개변수",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "먼저 로그인 하십시오", "Please login first": "먼저 로그인 하십시오",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "관리자만 %s을(를) 수정할 수 있습니다.", "Only admin can modify the %s.": "관리자만 %s을(를) 수정할 수 있습니다.",
"The %s is immutable.": "%s 는 변경할 수 없습니다.", "The %s is immutable.": "%s 는 변경할 수 없습니다.",
"Unknown modify rule %s.": "미확인 수정 규칙 %s." "Unknown modify rule %s.": "미확인 수정 규칙 %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "디스플레이 이름은 비어 있을 수 없습니다", "Display name cannot be empty": "디스플레이 이름은 비어 있을 수 없습니다",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "새 비밀번호에는 공백이 포함될 수 없습니다." "New password cannot contain blank space.": "새 비밀번호에는 공백이 포함될 수 없습니다.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "사용자 가져오기를 실패했습니다"
}, },
"util": { "util": {
"No application is found for userId: %s": "어플리케이션을 찾을 수 없습니다. userId: %s", "No application is found for userId: %s": "어플리케이션을 찾을 수 없습니다. userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Failed to import users",
"Missing parameter": "Missing parameter", "Missing parameter": "Missing parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first", "Please login first": "Please login first",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Only admin can modify the %s.", "Only admin can modify the %s.": "Only admin can modify the %s.",
"The %s is immutable.": "The %s is immutable.", "The %s is immutable.": "The %s is immutable.",
"Unknown modify rule %s.": "Unknown modify rule %s." "Unknown modify rule %s.": "Unknown modify rule %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Display name cannot be empty", "Display name cannot be empty": "Display name cannot be empty",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "New password cannot contain blank space." "New password cannot contain blank space.": "New password cannot contain blank space.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Failed to import users"
}, },
"util": { "util": {
"No application is found for userId: %s": "No application is found for userId: %s", "No application is found for userId: %s": "No application is found for userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Failed to import users",
"Missing parameter": "Missing parameter", "Missing parameter": "Missing parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first", "Please login first": "Please login first",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Only admin can modify the %s.", "Only admin can modify the %s.": "Only admin can modify the %s.",
"The %s is immutable.": "The %s is immutable.", "The %s is immutable.": "The %s is immutable.",
"Unknown modify rule %s.": "Unknown modify rule %s." "Unknown modify rule %s.": "Unknown modify rule %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Display name cannot be empty", "Display name cannot be empty": "Display name cannot be empty",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "New password cannot contain blank space." "New password cannot contain blank space.": "New password cannot contain blank space.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Failed to import users"
}, },
"util": { "util": {
"No application is found for userId: %s": "No application is found for userId: %s", "No application is found for userId: %s": "No application is found for userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Failed to import users",
"Missing parameter": "Missing parameter", "Missing parameter": "Missing parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first", "Please login first": "Please login first",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Only admin can modify the %s.", "Only admin can modify the %s.": "Only admin can modify the %s.",
"The %s is immutable.": "The %s is immutable.", "The %s is immutable.": "The %s is immutable.",
"Unknown modify rule %s.": "Unknown modify rule %s." "Unknown modify rule %s.": "Unknown modify rule %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Display name cannot be empty", "Display name cannot be empty": "Display name cannot be empty",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "New password cannot contain blank space." "New password cannot contain blank space.": "New password cannot contain blank space.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Failed to import users"
}, },
"util": { "util": {
"No application is found for userId: %s": "No application is found for userId: %s", "No application is found for userId: %s": "No application is found for userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Falha ao importar usuários",
"Missing parameter": "Missing parameter", "Missing parameter": "Missing parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first", "Please login first": "Please login first",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Only admin can modify the %s.", "Only admin can modify the %s.": "Only admin can modify the %s.",
"The %s is immutable.": "O %s é imutável.", "The %s is immutable.": "O %s é imutável.",
"Unknown modify rule %s.": "Regra de modificação %s desconhecida." "Unknown modify rule %s.": "Regra de modificação %s desconhecida.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Nome de exibição não pode ser vazio", "Display name cannot be empty": "Nome de exibição não pode ser vazio",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "New password cannot contain blank space." "New password cannot contain blank space.": "New password cannot contain blank space.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Falha ao importar usuários"
}, },
"util": { "util": {
"No application is found for userId: %s": "No application is found for userId: %s", "No application is found for userId: %s": "No application is found for userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Не удалось импортировать пользователей",
"Missing parameter": "Отсутствующий параметр", "Missing parameter": "Отсутствующий параметр",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Пожалуйста, сначала войдите в систему", "Please login first": "Пожалуйста, сначала войдите в систему",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Только администратор может изменять %s.", "Only admin can modify the %s.": "Только администратор может изменять %s.",
"The %s is immutable.": "%s неизменяемый.", "The %s is immutable.": "%s неизменяемый.",
"Unknown modify rule %s.": "Неизвестное изменение правила %s." "Unknown modify rule %s.": "Неизвестное изменение правила %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "Разрешение: \\\"%s\\\" не существует" "The permission: \\\"%s\\\" doesn't exist": "Разрешение: \\\"%s\\\" не существует"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Отображаемое имя не может быть пустым", "Display name cannot be empty": "Отображаемое имя не может быть пустым",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "Новый пароль не может содержать пробелы." "New password cannot contain blank space.": "Новый пароль не может содержать пробелы.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Не удалось импортировать пользователей"
}, },
"util": { "util": {
"No application is found for userId: %s": "Не найдено заявки для пользователя с идентификатором: %s", "No application is found for userId: %s": "Не найдено заявки для пользователя с идентификатором: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Nepodarilo sa importovať používateľov",
"Missing parameter": "Chýbajúci parameter", "Missing parameter": "Chýbajúci parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Najskôr sa prosím prihláste", "Please login first": "Najskôr sa prosím prihláste",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Len administrátor môže upravovať %s.", "Only admin can modify the %s.": "Len administrátor môže upravovať %s.",
"The %s is immutable.": "%s je nemenný.", "The %s is immutable.": "%s je nemenný.",
"Unknown modify rule %s.": "Neznáme pravidlo úprav %s." "Unknown modify rule %s.": "Neznáme pravidlo úprav %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "Povolenie: \\\"%s\\\" neexistuje" "The permission: \\\"%s\\\" doesn't exist": "Povolenie: \\\"%s\\\" neexistuje"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Zobrazované meno nemôže byť prázdne", "Display name cannot be empty": "Zobrazované meno nemôže byť prázdne",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "Nové heslo nemôže obsahovať medzery." "New password cannot contain blank space.": "Nové heslo nemôže obsahovať medzery.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Nepodarilo sa importovať používateľov"
}, },
"util": { "util": {
"No application is found for userId: %s": "Nebola nájdená žiadna aplikácia pre userId: %s", "No application is found for userId: %s": "Nebola nájdená žiadna aplikácia pre userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Failed to import users",
"Missing parameter": "Missing parameter", "Missing parameter": "Missing parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first", "Please login first": "Please login first",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Only admin can modify the %s.", "Only admin can modify the %s.": "Only admin can modify the %s.",
"The %s is immutable.": "The %s is immutable.", "The %s is immutable.": "The %s is immutable.",
"Unknown modify rule %s.": "Unknown modify rule %s." "Unknown modify rule %s.": "Unknown modify rule %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Display name cannot be empty", "Display name cannot be empty": "Display name cannot be empty",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "New password cannot contain blank space." "New password cannot contain blank space.": "New password cannot contain blank space.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Failed to import users"
}, },
"util": { "util": {
"No application is found for userId: %s": "No application is found for userId: %s", "No application is found for userId: %s": "No application is found for userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Failed to import users",
"Missing parameter": "Missing parameter", "Missing parameter": "Missing parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first", "Please login first": "Please login first",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Only admin can modify the %s.", "Only admin can modify the %s.": "Only admin can modify the %s.",
"The %s is immutable.": "The %s is immutable.", "The %s is immutable.": "The %s is immutable.",
"Unknown modify rule %s.": "Unknown modify rule %s." "Unknown modify rule %s.": "Unknown modify rule %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Görünen ad boş olamaz", "Display name cannot be empty": "Görünen ad boş olamaz",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "Yeni şifreniz boşluk karakteri içeremez." "New password cannot contain blank space.": "Yeni şifreniz boşluk karakteri içeremez.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Failed to import users"
}, },
"util": { "util": {
"No application is found for userId: %s": "No application is found for userId: %s", "No application is found for userId: %s": "No application is found for userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Failed to import users",
"Missing parameter": "Missing parameter", "Missing parameter": "Missing parameter",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Please login first", "Please login first": "Please login first",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Only admin can modify the %s.", "Only admin can modify the %s.": "Only admin can modify the %s.",
"The %s is immutable.": "The %s is immutable.", "The %s is immutable.": "The %s is immutable.",
"Unknown modify rule %s.": "Unknown modify rule %s." "Unknown modify rule %s.": "Unknown modify rule %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Display name cannot be empty", "Display name cannot be empty": "Display name cannot be empty",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "New password cannot contain blank space." "New password cannot contain blank space.": "New password cannot contain blank space.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Failed to import users"
}, },
"util": { "util": {
"No application is found for userId: %s": "No application is found for userId: %s", "No application is found for userId: %s": "No application is found for userId: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "the adapter: %s is not found" "the adapter: %s is not found": "the adapter: %s is not found"
}, },
"general": { "general": {
"Failed to import groups": "Failed to import groups",
"Failed to import users": "Không thể nhập người dùng",
"Missing parameter": "Thiếu tham số", "Missing parameter": "Thiếu tham số",
"Only admin user can specify user": "Only admin user can specify user", "Only admin user can specify user": "Only admin user can specify user",
"Please login first": "Vui lòng đăng nhập trước", "Please login first": "Vui lòng đăng nhập trước",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "Chỉ những người quản trị mới có thể sửa đổi %s.", "Only admin can modify the %s.": "Chỉ những người quản trị mới có thể sửa đổi %s.",
"The %s is immutable.": "%s không thể thay đổi được.", "The %s is immutable.": "%s không thể thay đổi được.",
"Unknown modify rule %s.": "Quy tắc thay đổi không xác định %s." "Unknown modify rule %s.": "Quy tắc thay đổi không xác định %s.",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist" "The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "Tên hiển thị không thể trống", "Display name cannot be empty": "Tên hiển thị không thể trống",
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty", "MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty", "MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
"New password cannot contain blank space.": "Mật khẩu mới không thể chứa dấu trắng." "New password cannot contain blank space.": "Mật khẩu mới không thể chứa dấu trắng.",
}, "the user's owner and name should not be empty": "the user's owner and name should not be empty"
"user_upload": {
"Failed to import users": "Không thể nhập người dùng"
}, },
"util": { "util": {
"No application is found for userId: %s": "Không tìm thấy ứng dụng cho ID người dùng: %s", "No application is found for userId: %s": "Không tìm thấy ứng dụng cho ID người dùng: %s",

View File

@@ -92,6 +92,8 @@
"the adapter: %s is not found": "适配器: %s 未找到" "the adapter: %s is not found": "适配器: %s 未找到"
}, },
"general": { "general": {
"Failed to import groups": "导入群组失败",
"Failed to import users": "导入用户失败",
"Missing parameter": "缺少参数", "Missing parameter": "缺少参数",
"Only admin user can specify user": "仅管理员用户可以指定用户", "Only admin user can specify user": "仅管理员用户可以指定用户",
"Please login first": "请先登录", "Please login first": "请先登录",
@@ -116,7 +118,8 @@
"organization": { "organization": {
"Only admin can modify the %s.": "仅允许管理员可以修改%s", "Only admin can modify the %s.": "仅允许管理员可以修改%s",
"The %s is immutable.": "%s 是不可变的", "The %s is immutable.": "%s 是不可变的",
"Unknown modify rule %s.": "未知的修改规则: %s" "Unknown modify rule %s.": "未知的修改规则: %s",
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "目前,向'built-in'组织添加新用户的功能已禁用。请注意:'built-in'组织中的所有用户均为Casdoor的全局管理员。请参阅文档https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself。如果您仍希望为built-in组织创建用户请转到该组织的设置页面并启用“特权同意”选项。"
}, },
"permission": { "permission": {
"The permission: \\\"%s\\\" doesn't exist": "权限: \\\"%s\\\" 不存在" "The permission: \\\"%s\\\" doesn't exist": "权限: \\\"%s\\\" 不存在"
@@ -158,10 +161,8 @@
"Display name cannot be empty": "显示名称不可为空", "Display name cannot be empty": "显示名称不可为空",
"MFA email is enabled but email is empty": "MFA 电子邮件已启用,但电子邮件为空", "MFA email is enabled but email is empty": "MFA 电子邮件已启用,但电子邮件为空",
"MFA phone is enabled but phone number is empty": "MFA 电话已启用,但电话号码为空", "MFA phone is enabled but phone number is empty": "MFA 电话已启用,但电话号码为空",
"New password cannot contain blank space.": "新密码不可以包含空格" "New password cannot contain blank space.": "新密码不可以包含空格",
}, "the user's owner and name should not be empty": "用户的组织和名称不能为空"
"user_upload": {
"Failed to import users": "导入用户失败"
}, },
"util": { "util": {
"No application is found for userId: %s": "未找到用户: %s的应用", "No application is found for userId: %s": "未找到用户: %s的应用",

View File

@@ -45,6 +45,7 @@ func main() {
object.InitUserManager() object.InitUserManager()
object.InitFromFile() object.InitFromFile()
object.InitCasvisorConfig() object.InitCasvisorConfig()
object.InitCleanupTokens()
util.SafeGoroutine(func() { object.RunSyncUsersJob() }) util.SafeGoroutine(func() { object.RunSyncUsersJob() })
util.SafeGoroutine(func() { controllers.InitCLIDownloader() }) util.SafeGoroutine(func() { controllers.InitCLIDownloader() })
@@ -63,6 +64,7 @@ func main() {
beego.InsertFilter("*", beego.BeforeRouter, routers.ApiFilter) beego.InsertFilter("*", beego.BeforeRouter, routers.ApiFilter)
beego.InsertFilter("*", beego.BeforeRouter, routers.PrometheusFilter) beego.InsertFilter("*", beego.BeforeRouter, routers.PrometheusFilter)
beego.InsertFilter("*", beego.BeforeRouter, routers.RecordMessage) beego.InsertFilter("*", beego.BeforeRouter, routers.RecordMessage)
beego.InsertFilter("*", beego.BeforeRouter, routers.FieldValidationFilter)
beego.InsertFilter("*", beego.AfterExec, routers.AfterRecordMessage, false) beego.InsertFilter("*", beego.AfterExec, routers.AfterRecordMessage, false)
beego.BConfig.WebConfig.Session.SessionOn = true beego.BConfig.WebConfig.Session.SessionOn = true

View File

@@ -181,6 +181,41 @@ func AddGroups(groups []*Group) (bool, error) {
return affected != 0, nil return affected != 0, nil
} }
func AddGroupsInBatch(groups []*Group) (bool, error) {
if len(groups) == 0 {
return false, nil
}
session := ormer.Engine.NewSession()
defer session.Close()
err := session.Begin()
if err != nil {
return false, err
}
for _, group := range groups {
err = checkGroupName(group.Name)
if err != nil {
return false, err
}
affected, err := session.Insert(group)
if err != nil {
return false, err
}
if affected == 0 {
return false, nil
}
}
err = session.Commit()
if err != nil {
return false, err
}
return true, nil
}
func deleteGroup(group *Group) (bool, error) { func deleteGroup(group *Group) (bool, error) {
affected, err := ormer.Engine.ID(core.PK{group.Owner, group.Name}).Delete(&Group{}) affected, err := ormer.Engine.ID(core.PK{group.Owner, group.Name}).Delete(&Group{})
if err != nil { if err != nil {

61
object/group_upload.go Normal file
View File

@@ -0,0 +1,61 @@
// Copyright 2025 The Casdoor Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package object
import (
"github.com/casdoor/casdoor/xlsx"
)
func getGroupMap(owner string) (map[string]*Group, error) {
m := map[string]*Group{}
groups, err := GetGroups(owner)
if err != nil {
return m, err
}
for _, group := range groups {
m[group.GetId()] = group
}
return m, nil
}
func UploadGroups(owner string, path string) (bool, error) {
table := xlsx.ReadXlsxFile(path)
oldGroupMap, err := getGroupMap(owner)
if err != nil {
return false, err
}
transGroups, err := StringArrayToStruct[Group](table)
if err != nil {
return false, err
}
newGroups := []*Group{}
for _, group := range transGroups {
if _, ok := oldGroupMap[group.GetId()]; !ok {
newGroups = append(newGroups, group)
}
}
if len(newGroups) == 0 {
return false, nil
}
return AddGroupsInBatch(newGroups)
}

View File

@@ -154,7 +154,7 @@ func initBuiltInUser() {
CreatedIp: "127.0.0.1", CreatedIp: "127.0.0.1",
Properties: make(map[string]string), Properties: make(map[string]string),
} }
_, err = AddUser(user) _, err = AddUser(user, "en")
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@@ -342,7 +342,7 @@ func initDefinedUser(user *User) {
if user.Properties == nil { if user.Properties == nil {
user.Properties = make(map[string]string) user.Properties = make(map[string]string)
} }
_, err = AddUser(user) _, err = AddUser(user, "en")
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@@ -268,7 +268,7 @@ func AutoAdjustLdapUser(users []LdapUser) []LdapUser {
DisplayName: user.DisplayName, DisplayName: user.DisplayName,
Email: util.ReturnAnyNotEmpty(user.Email, user.EmailAddress, user.Mail), Email: util.ReturnAnyNotEmpty(user.Email, user.EmailAddress, user.Mail),
Mobile: util.ReturnAnyNotEmpty(user.Mobile, user.MobileTelephoneNumber, user.TelephoneNumber), Mobile: util.ReturnAnyNotEmpty(user.Mobile, user.MobileTelephoneNumber, user.TelephoneNumber),
RegisteredAddress: util.ReturnAnyNotEmpty(user.PostalAddress, user.RegisteredAddress), Address: util.ReturnAnyNotEmpty(user.Address, user.PostalAddress, user.RegisteredAddress),
} }
} }
return res return res
@@ -351,7 +351,7 @@ func SyncLdapUsers(owner string, syncUsers []LdapUser, ldapId string) (existUser
newUser.Groups = []string{ldap.DefaultGroup} newUser.Groups = []string{ldap.DefaultGroup}
} }
affected, err := AddUser(newUser) affected, err := AddUser(newUser, "en")
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }

View File

@@ -57,6 +57,7 @@ type Organization struct {
Logo string `xorm:"varchar(200)" json:"logo"` Logo string `xorm:"varchar(200)" json:"logo"`
LogoDark string `xorm:"varchar(200)" json:"logoDark"` LogoDark string `xorm:"varchar(200)" json:"logoDark"`
Favicon string `xorm:"varchar(200)" json:"favicon"` Favicon string `xorm:"varchar(200)" json:"favicon"`
HasPrivilegeConsent bool `xorm:"bool" json:"hasPrivilegeConsent"`
PasswordType string `xorm:"varchar(100)" json:"passwordType"` PasswordType string `xorm:"varchar(100)" json:"passwordType"`
PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"` PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"`
PasswordOptions []string `xorm:"varchar(100)" json:"passwordOptions"` PasswordOptions []string `xorm:"varchar(100)" json:"passwordOptions"`

View File

@@ -42,6 +42,7 @@ type Product struct {
IsRecharge bool `json:"isRecharge"` IsRecharge bool `json:"isRecharge"`
Providers []string `xorm:"varchar(255)" json:"providers"` Providers []string `xorm:"varchar(255)" json:"providers"`
ReturnUrl string `xorm:"varchar(1000)" json:"returnUrl"` ReturnUrl string `xorm:"varchar(1000)" json:"returnUrl"`
SuccessUrl string `xorm:"varchar(1000)" json:"successUrl"`
State string `xorm:"varchar(100)" json:"state"` State string `xorm:"varchar(100)" json:"state"`
@@ -213,6 +214,10 @@ func BuyProduct(id string, user *User, providerName, pricingName, planName, host
returnUrl = fmt.Sprintf("%s/buy-plan/%s/%s/result?subscription=%s", originFrontend, owner, pricingName, sub.Name) returnUrl = fmt.Sprintf("%s/buy-plan/%s/%s/result?subscription=%s", originFrontend, owner, pricingName, sub.Name)
} }
} }
if product.SuccessUrl != "" {
returnUrl = fmt.Sprintf("%s?transactionOwner=%s&transactionName=%s", product.SuccessUrl, owner, paymentName)
}
// Create an order // Create an order
payReq := &pp.PayReq{ payReq := &pp.PayReq{
ProviderName: providerName, ProviderName: providerName,

86
object/token_cleanup.go Normal file
View File

@@ -0,0 +1,86 @@
// Copyright 2025 The Casdoor Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package object
import (
"fmt"
"time"
"github.com/casdoor/casdoor/util"
"github.com/golang-jwt/jwt/v5"
"github.com/robfig/cron/v3"
)
func CleanupTokens(tokenRetentionIntervalAfterExpiry int) error {
var sessions []*Token
err := ormer.Engine.Where("expires_in = ?", 0).Find(&sessions)
if err != nil {
return fmt.Errorf("failed to query expired tokens: %w", err)
}
currentTime := util.String2Time(util.GetCurrentUnixTime())
for _, session := range sessions {
tokenString := session.AccessToken
token, _, err := new(jwt.Parser).ParseUnverified(tokenString, jwt.MapClaims{})
if err != nil {
fmt.Printf("Failed to parse token %s: %v\n", session.Name, err)
continue
}
if claims, ok := token.Claims.(jwt.MapClaims); ok {
exp, ok := claims["exp"].(float64)
if !ok {
fmt.Printf("Token %s does not have an 'exp' claim\n", session.Name)
continue
}
expireTime := time.Unix(int64(exp), 0)
tokenAfterExpiry := currentTime.Sub(expireTime).Seconds()
if tokenAfterExpiry > float64(tokenRetentionIntervalAfterExpiry) {
_, err = ormer.Engine.Delete(session)
if err != nil {
return fmt.Errorf("failed to delete expired token %s: %w", session.Name, err)
}
fmt.Printf("Deleted expired token: %s\n", session.Name)
}
} else {
fmt.Printf("Token %s is not valid\n", session.Name)
}
}
return nil
}
func getTokenRetentionInterval(days int) int {
if days <= 0 {
days = 30
}
return days * 24 * 3600
}
func InitCleanupTokens() {
schedule := "0 0 0 * * ?"
cronJob := cron.New()
_, err := cronJob.AddFunc(schedule, func() {
interval := getTokenRetentionInterval(30)
if err := CleanupTokens(interval); err != nil {
fmt.Printf("Error cleaning up tokens: %v\n", err)
}
})
if err != nil {
fmt.Printf("Error scheduling token cleanup: %v\n", err)
return
}
cronJob.Start()
}

View File

@@ -764,7 +764,7 @@ func GetWechatMiniProgramToken(application *Application, code string, host strin
UserPropertiesWechatUnionId: unionId, UserPropertiesWechatUnionId: unionId,
}, },
} }
_, err = AddUser(user) _, err = AddUser(user, "en")
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }

View File

@@ -25,6 +25,7 @@ import (
"github.com/casdoor/casdoor/conf" "github.com/casdoor/casdoor/conf"
"github.com/casdoor/casdoor/faceId" "github.com/casdoor/casdoor/faceId"
"github.com/casdoor/casdoor/i18n"
"github.com/casdoor/casdoor/proxy" "github.com/casdoor/casdoor/proxy"
"github.com/casdoor/casdoor/util" "github.com/casdoor/casdoor/util"
"github.com/go-webauthn/webauthn/webauthn" "github.com/go-webauthn/webauthn/webauthn"
@@ -660,6 +661,62 @@ func GetMaskedUser(user *User, isAdminOrSelf bool, errs ...error) (*User, error)
return user, nil return user, nil
} }
func GetFilteredUser(user *User, isAdmin bool, isAdminOrSelf bool, accountItems []*AccountItem) (*User, error) {
if accountItems == nil || len(accountItems) == 0 {
return user, nil
}
userFieldMap := map[string]int{}
reflectedUserField := reflect.TypeOf(User{})
for i := 0; i < reflectedUserField.NumField(); i++ {
userFieldMap[strings.ToLower(reflectedUserField.Field(i).Name)] = i
}
reflectedUser := reflect.ValueOf(user).Elem()
for _, accountItem := range accountItems {
if accountItem.ViewRule == "Public" {
continue
} else if accountItem.ViewRule == "Self" && isAdminOrSelf {
continue
} else if accountItem.ViewRule == "Admin" && isAdmin {
continue
}
lowerCaseAccountItemName := strings.ToLower(accountItem.Name)
lowerCaseAccountItemName = strings.ReplaceAll(lowerCaseAccountItemName, " ", "")
switch accountItem.Name {
case "Multi-factor authentication":
lowerCaseAccountItemName = strings.ToLower("PreferredMfaType")
case "User type":
lowerCaseAccountItemName = "type"
case "Country/Region":
lowerCaseAccountItemName = "region"
case "ID card info":
{
infoKeys := []string{"idCardWithPerson", "idCardFront", "idCardWithPerson"}
for _, infoKey := range infoKeys {
if _, ok := user.Properties[infoKey]; ok {
user.Properties[infoKey] = ""
}
}
continue
}
}
fieldIdx, ok := userFieldMap[lowerCaseAccountItemName]
if !ok {
continue
}
reflectedUser.Field(fieldIdx).SetZero()
}
return user, nil
}
func GetMaskedUsers(users []*User, errs ...error) ([]*User, error) { func GetMaskedUsers(users []*User, errs ...error) ([]*User, error) {
if len(errs) > 0 && errs[0] != nil { if len(errs) > 0 && errs[0] != nil {
return nil, errs[0] return nil, errs[0]
@@ -818,7 +875,7 @@ func UpdateUserForAllFields(id string, user *User) (bool, error) {
return affected != 0, nil return affected != 0, nil
} }
func AddUser(user *User) (bool, error) { func AddUser(user *User, lang string) (bool, error) {
if user.Id == "" { if user.Id == "" {
application, err := GetApplicationByUser(user) application, err := GetApplicationByUser(user)
if err != nil { if err != nil {
@@ -834,7 +891,7 @@ func AddUser(user *User) (bool, error) {
} }
if user.Owner == "" || user.Name == "" { if user.Owner == "" || user.Name == "" {
return false, fmt.Errorf("the user's owner and name should not be empty") return false, fmt.Errorf(i18n.Translate(lang, "user:the user's owner and name should not be empty"))
} }
if CheckUsernameWithEmail(user.Name, "en") != "" { if CheckUsernameWithEmail(user.Name, "en") != "" {
@@ -846,7 +903,7 @@ func AddUser(user *User) (bool, error) {
return false, err return false, err
} }
if organization == nil { if organization == nil {
return false, fmt.Errorf("the organization: %s is not found", user.Owner) return false, fmt.Errorf(i18n.Translate(lang, "auth:the organization: %s is not found"), user.Owner)
} }
if user.Owner != "built-in" { if user.Owner != "built-in" {
@@ -855,10 +912,14 @@ func AddUser(user *User) (bool, error) {
return false, err return false, err
} }
if applicationCount == 0 { if applicationCount == 0 {
return false, fmt.Errorf("The organization: %s should have one application at least", organization.Owner) return false, fmt.Errorf(i18n.Translate(lang, "general:The organization: %s should have one application at least"), organization.Owner)
} }
} }
if organization.Name == "built-in" && !organization.HasPrivilegeConsent && user.Name != "admin" {
return false, fmt.Errorf(i18n.Translate(lang, "organization:adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."))
}
if organization.DefaultPassword != "" && user.Password == "123" { if organization.DefaultPassword != "" && user.Password == "123" {
user.Password = organization.DefaultPassword user.Password = organization.DefaultPassword
} }

View File

@@ -81,7 +81,7 @@ func UploadUsers(owner string, path string) (bool, error) {
return false, err return false, err
} }
transUsers, err := StringArrayToUser(table) transUsers, err := StringArrayToStruct[User](table)
if err != nil { if err != nil {
return false, err return false, err
} }

View File

@@ -263,7 +263,19 @@ func ClearUserOAuthProperties(user *User, providerType string) (bool, error) {
return affected != 0, nil return affected != 0, nil
} }
func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang string) (bool, string) { func userVisible(isAdmin bool, item *AccountItem) bool {
if item == nil {
return false
}
if item.ViewRule == "Admin" && !isAdmin {
return false
}
return true
}
func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, allowDisplayNameEmpty bool, lang string) (bool, string) {
organization, err := GetOrganizationByUser(oldUser) organization, err := GetOrganizationByUser(oldUser)
if err != nil { if err != nil {
return false, err.Error() return false, err.Error()
@@ -273,7 +285,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.Owner != newUser.Owner { if oldUser.Owner != newUser.Owner {
item := GetAccountItemByName("Organization", organization) item := GetAccountItemByName("Organization", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Owner = oldUser.Owner newUser.Owner = oldUser.Owner
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -281,7 +293,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.Name != newUser.Name { if oldUser.Name != newUser.Name {
item := GetAccountItemByName("Name", organization) item := GetAccountItemByName("Name", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Name = oldUser.Name newUser.Name = oldUser.Name
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -289,7 +301,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.Id != newUser.Id { if oldUser.Id != newUser.Id {
item := GetAccountItemByName("ID", organization) item := GetAccountItemByName("ID", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Id = oldUser.Id newUser.Id = oldUser.Id
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -297,15 +309,19 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.DisplayName != newUser.DisplayName { if oldUser.DisplayName != newUser.DisplayName {
item := GetAccountItemByName("Display name", organization) item := GetAccountItemByName("Display name", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.DisplayName = oldUser.DisplayName newUser.DisplayName = oldUser.DisplayName
} else { } else {
if !allowDisplayNameEmpty && newUser.DisplayName == "" {
return false, i18n.Translate(lang, "user:Display name cannot be empty")
}
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
} }
} }
if oldUser.Avatar != newUser.Avatar { if oldUser.Avatar != newUser.Avatar {
item := GetAccountItemByName("Avatar", organization) item := GetAccountItemByName("Avatar", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Avatar = oldUser.Avatar newUser.Avatar = oldUser.Avatar
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -313,7 +329,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.Type != newUser.Type { if oldUser.Type != newUser.Type {
item := GetAccountItemByName("User type", organization) item := GetAccountItemByName("User type", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Type = oldUser.Type newUser.Type = oldUser.Type
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -322,7 +338,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
// The password is *** when not modified // The password is *** when not modified
if oldUser.Password != newUser.Password && newUser.Password != "***" { if oldUser.Password != newUser.Password && newUser.Password != "***" {
item := GetAccountItemByName("Password", organization) item := GetAccountItemByName("Password", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Password = oldUser.Password newUser.Password = oldUser.Password
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -330,7 +346,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.Email != newUser.Email { if oldUser.Email != newUser.Email {
item := GetAccountItemByName("Email", organization) item := GetAccountItemByName("Email", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Email = oldUser.Email newUser.Email = oldUser.Email
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -338,7 +354,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.Phone != newUser.Phone { if oldUser.Phone != newUser.Phone {
item := GetAccountItemByName("Phone", organization) item := GetAccountItemByName("Phone", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Phone = oldUser.Phone newUser.Phone = oldUser.Phone
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -346,7 +362,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.CountryCode != newUser.CountryCode { if oldUser.CountryCode != newUser.CountryCode {
item := GetAccountItemByName("Country code", organization) item := GetAccountItemByName("Country code", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.CountryCode = oldUser.CountryCode newUser.CountryCode = oldUser.CountryCode
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -354,7 +370,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.Region != newUser.Region { if oldUser.Region != newUser.Region {
item := GetAccountItemByName("Country/Region", organization) item := GetAccountItemByName("Country/Region", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Region = oldUser.Region newUser.Region = oldUser.Region
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -362,7 +378,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.Location != newUser.Location { if oldUser.Location != newUser.Location {
item := GetAccountItemByName("Location", organization) item := GetAccountItemByName("Location", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Location = oldUser.Location newUser.Location = oldUser.Location
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -370,7 +386,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.Affiliation != newUser.Affiliation { if oldUser.Affiliation != newUser.Affiliation {
item := GetAccountItemByName("Affiliation", organization) item := GetAccountItemByName("Affiliation", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Affiliation = oldUser.Affiliation newUser.Affiliation = oldUser.Affiliation
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -378,7 +394,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.Title != newUser.Title { if oldUser.Title != newUser.Title {
item := GetAccountItemByName("Title", organization) item := GetAccountItemByName("Title", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Title = oldUser.Title newUser.Title = oldUser.Title
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -386,7 +402,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.Homepage != newUser.Homepage { if oldUser.Homepage != newUser.Homepage {
item := GetAccountItemByName("Homepage", organization) item := GetAccountItemByName("Homepage", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Homepage = oldUser.Homepage newUser.Homepage = oldUser.Homepage
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -394,7 +410,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.Bio != newUser.Bio { if oldUser.Bio != newUser.Bio {
item := GetAccountItemByName("Bio", organization) item := GetAccountItemByName("Bio", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Bio = oldUser.Bio newUser.Bio = oldUser.Bio
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -402,7 +418,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.Tag != newUser.Tag { if oldUser.Tag != newUser.Tag {
item := GetAccountItemByName("Tag", organization) item := GetAccountItemByName("Tag", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Tag = oldUser.Tag newUser.Tag = oldUser.Tag
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -410,7 +426,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.SignupApplication != newUser.SignupApplication { if oldUser.SignupApplication != newUser.SignupApplication {
item := GetAccountItemByName("Signup application", organization) item := GetAccountItemByName("Signup application", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.SignupApplication = oldUser.SignupApplication newUser.SignupApplication = oldUser.SignupApplication
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -419,7 +435,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.Gender != newUser.Gender { if oldUser.Gender != newUser.Gender {
item := GetAccountItemByName("Gender", organization) item := GetAccountItemByName("Gender", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Gender = oldUser.Gender newUser.Gender = oldUser.Gender
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -428,7 +444,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.Birthday != newUser.Birthday { if oldUser.Birthday != newUser.Birthday {
item := GetAccountItemByName("Birthday", organization) item := GetAccountItemByName("Birthday", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Birthday = oldUser.Birthday newUser.Birthday = oldUser.Birthday
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -437,7 +453,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.Education != newUser.Education { if oldUser.Education != newUser.Education {
item := GetAccountItemByName("Education", organization) item := GetAccountItemByName("Education", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Education = oldUser.Education newUser.Education = oldUser.Education
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -446,7 +462,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.IdCard != newUser.IdCard { if oldUser.IdCard != newUser.IdCard {
item := GetAccountItemByName("ID card", organization) item := GetAccountItemByName("ID card", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.IdCard = oldUser.IdCard newUser.IdCard = oldUser.IdCard
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -455,7 +471,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.IdCardType != newUser.IdCardType { if oldUser.IdCardType != newUser.IdCardType {
item := GetAccountItemByName("ID card type", organization) item := GetAccountItemByName("ID card type", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.IdCardType = oldUser.IdCardType newUser.IdCardType = oldUser.IdCardType
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -463,10 +479,13 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
oldUserPropertiesJson, _ := json.Marshal(oldUser.Properties) oldUserPropertiesJson, _ := json.Marshal(oldUser.Properties)
if newUser.Properties == nil {
newUser.Properties = make(map[string]string)
}
newUserPropertiesJson, _ := json.Marshal(newUser.Properties) newUserPropertiesJson, _ := json.Marshal(newUser.Properties)
if string(oldUserPropertiesJson) != string(newUserPropertiesJson) { if string(oldUserPropertiesJson) != string(newUserPropertiesJson) {
item := GetAccountItemByName("Properties", organization) item := GetAccountItemByName("Properties", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Properties = oldUser.Properties newUser.Properties = oldUser.Properties
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -475,7 +494,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.PreferredMfaType != newUser.PreferredMfaType { if oldUser.PreferredMfaType != newUser.PreferredMfaType {
item := GetAccountItemByName("Multi-factor authentication", organization) item := GetAccountItemByName("Multi-factor authentication", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.PreferredMfaType = oldUser.PreferredMfaType newUser.PreferredMfaType = oldUser.PreferredMfaType
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -486,13 +505,14 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
oldUser.Groups = []string{} oldUser.Groups = []string{}
} }
oldUserGroupsJson, _ := json.Marshal(oldUser.Groups) oldUserGroupsJson, _ := json.Marshal(oldUser.Groups)
if newUser.Groups == nil { if newUser.Groups == nil {
newUser.Groups = []string{} newUser.Groups = []string{}
} }
newUserGroupsJson, _ := json.Marshal(newUser.Groups) newUserGroupsJson, _ := json.Marshal(newUser.Groups)
if string(oldUserGroupsJson) != string(newUserGroupsJson) { if string(oldUserGroupsJson) != string(newUserGroupsJson) {
item := GetAccountItemByName("Groups", organization) item := GetAccountItemByName("Groups", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Groups = oldUser.Groups newUser.Groups = oldUser.Groups
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -510,7 +530,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
newUserAddressJson, _ := json.Marshal(newUser.Address) newUserAddressJson, _ := json.Marshal(newUser.Address)
if string(oldUserAddressJson) != string(newUserAddressJson) { if string(oldUserAddressJson) != string(newUserAddressJson) {
item := GetAccountItemByName("Address", organization) item := GetAccountItemByName("Address", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Address = oldUser.Address newUser.Address = oldUser.Address
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -519,7 +539,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if newUser.FaceIds != nil { if newUser.FaceIds != nil {
item := GetAccountItemByName("Face ID", organization) item := GetAccountItemByName("Face ID", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.FaceIds = oldUser.FaceIds newUser.FaceIds = oldUser.FaceIds
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -528,7 +548,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.IsAdmin != newUser.IsAdmin { if oldUser.IsAdmin != newUser.IsAdmin {
item := GetAccountItemByName("Is admin", organization) item := GetAccountItemByName("Is admin", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.IsAdmin = oldUser.IsAdmin newUser.IsAdmin = oldUser.IsAdmin
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -537,7 +557,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.IsForbidden != newUser.IsForbidden { if oldUser.IsForbidden != newUser.IsForbidden {
item := GetAccountItemByName("Is forbidden", organization) item := GetAccountItemByName("Is forbidden", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.IsForbidden = oldUser.IsForbidden newUser.IsForbidden = oldUser.IsForbidden
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -545,7 +565,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.IsDeleted != newUser.IsDeleted { if oldUser.IsDeleted != newUser.IsDeleted {
item := GetAccountItemByName("Is deleted", organization) item := GetAccountItemByName("Is deleted", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.IsDeleted = oldUser.IsDeleted newUser.IsDeleted = oldUser.IsDeleted
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -553,7 +573,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.NeedUpdatePassword != newUser.NeedUpdatePassword { if oldUser.NeedUpdatePassword != newUser.NeedUpdatePassword {
item := GetAccountItemByName("Need update password", organization) item := GetAccountItemByName("Need update password", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.NeedUpdatePassword = oldUser.NeedUpdatePassword newUser.NeedUpdatePassword = oldUser.NeedUpdatePassword
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -561,7 +581,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
} }
if oldUser.IpWhitelist != newUser.IpWhitelist { if oldUser.IpWhitelist != newUser.IpWhitelist {
item := GetAccountItemByName("IP whitelist", organization) item := GetAccountItemByName("IP whitelist", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.IpWhitelist = oldUser.IpWhitelist newUser.IpWhitelist = oldUser.IpWhitelist
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -570,7 +590,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.Balance != newUser.Balance { if oldUser.Balance != newUser.Balance {
item := GetAccountItemByName("Balance", organization) item := GetAccountItemByName("Balance", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Balance = oldUser.Balance newUser.Balance = oldUser.Balance
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -579,7 +599,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.Score != newUser.Score { if oldUser.Score != newUser.Score {
item := GetAccountItemByName("Score", organization) item := GetAccountItemByName("Score", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Score = oldUser.Score newUser.Score = oldUser.Score
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -588,7 +608,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.Karma != newUser.Karma { if oldUser.Karma != newUser.Karma {
item := GetAccountItemByName("Karma", organization) item := GetAccountItemByName("Karma", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Karma = oldUser.Karma newUser.Karma = oldUser.Karma
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -597,7 +617,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.Language != newUser.Language { if oldUser.Language != newUser.Language {
item := GetAccountItemByName("Language", organization) item := GetAccountItemByName("Language", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Language = oldUser.Language newUser.Language = oldUser.Language
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -606,7 +626,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.Ranking != newUser.Ranking { if oldUser.Ranking != newUser.Ranking {
item := GetAccountItemByName("Ranking", organization) item := GetAccountItemByName("Ranking", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Ranking = oldUser.Ranking newUser.Ranking = oldUser.Ranking
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -615,7 +635,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.Currency != newUser.Currency { if oldUser.Currency != newUser.Currency {
item := GetAccountItemByName("Currency", organization) item := GetAccountItemByName("Currency", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Currency = oldUser.Currency newUser.Currency = oldUser.Currency
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -624,7 +644,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
if oldUser.Hash != newUser.Hash { if oldUser.Hash != newUser.Hash {
item := GetAccountItemByName("Hash", organization) item := GetAccountItemByName("Hash", organization)
if item == nil { if !userVisible(isAdmin, item) {
newUser.Hash = oldUser.Hash newUser.Hash = oldUser.Hash
} else { } else {
itemsChanged = append(itemsChanged, item) itemsChanged = append(itemsChanged, item)
@@ -704,14 +724,14 @@ func setReflectAttr[T any](fieldValue *reflect.Value, fieldString string) error
return nil return nil
} }
func StringArrayToUser(stringArray [][]string) ([]*User, error) { func StringArrayToStruct[T any](stringArray [][]string) ([]*T, error) {
fieldNames := stringArray[0] fieldNames := stringArray[0]
excelMap := []map[string]string{} excelMap := []map[string]string{}
userFieldMap := map[string]int{} structFieldMap := map[string]int{}
reflectedUser := reflect.TypeOf(User{}) reflectedStruct := reflect.TypeOf(*new(T))
for i := 0; i < reflectedUser.NumField(); i++ { for i := 0; i < reflectedStruct.NumField(); i++ {
userFieldMap[strings.ToLower(reflectedUser.Field(i).Name)] = i structFieldMap[strings.ToLower(reflectedStruct.Field(i).Name)] = i
} }
for idx, field := range stringArray { for idx, field := range stringArray {
@@ -726,22 +746,23 @@ func StringArrayToUser(stringArray [][]string) ([]*User, error) {
excelMap = append(excelMap, tempMap) excelMap = append(excelMap, tempMap)
} }
users := []*User{} instances := []*T{}
var err error var err error
for _, u := range excelMap { for _, m := range excelMap {
user := User{} instance := new(T)
reflectedUser := reflect.ValueOf(&user).Elem() reflectedInstance := reflect.ValueOf(instance).Elem()
for k, v := range u {
for k, v := range m {
if v == "" || v == "null" || v == "[]" || v == "{}" { if v == "" || v == "null" || v == "[]" || v == "{}" {
continue continue
} }
fName := strings.ToLower(strings.ReplaceAll(k, "_", "")) fName := strings.ToLower(strings.ReplaceAll(k, "_", ""))
fieldIdx, ok := userFieldMap[fName] fieldIdx, ok := structFieldMap[fName]
if !ok { if !ok {
continue continue
} }
fv := reflectedUser.Field(fieldIdx) fv := reflectedInstance.Field(fieldIdx)
if !fv.IsValid() { if !fv.IsValid() {
continue continue
} }
@@ -786,8 +807,8 @@ func StringArrayToUser(stringArray [][]string) ([]*User, error) {
return nil, err return nil, err
} }
} }
users = append(users, &user) instances = append(instances, instance)
} }
return users, nil return instances, nil
} }

View File

@@ -0,0 +1,56 @@
// Copyright 2025 The Casdoor Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package routers
import (
"encoding/json"
"fmt"
"io"
"strings"
"github.com/beego/beego/context"
)
var forbiddenChars = `/?:@#&%=+;`
func FieldValidationFilter(ctx *context.Context) {
if ctx.Input.Method() != "POST" {
return
}
urlPath := ctx.Request.URL.Path
if !(strings.HasPrefix(urlPath, "/api/add-") || strings.HasPrefix(urlPath, "/api/update-")) {
return
}
bodyBytes, err := io.ReadAll(ctx.Request.Body)
if err != nil || len(bodyBytes) == 0 {
return
}
ctx.Request.Body = io.NopCloser(strings.NewReader(string(bodyBytes)))
var requestData map[string]interface{}
if err := json.Unmarshal(bodyBytes, &requestData); err != nil {
return
}
if value, ok := requestData["name"].(string); ok {
if strings.ContainsAny(value, forbiddenChars) {
responseError(ctx, fmt.Sprintf("Field 'name' contains forbidden characters: %q", forbiddenChars))
return
}
}
}

View File

@@ -81,6 +81,7 @@ func initAPI() {
beego.Router("/api/update-group", &controllers.ApiController{}, "POST:UpdateGroup") beego.Router("/api/update-group", &controllers.ApiController{}, "POST:UpdateGroup")
beego.Router("/api/add-group", &controllers.ApiController{}, "POST:AddGroup") beego.Router("/api/add-group", &controllers.ApiController{}, "POST:AddGroup")
beego.Router("/api/delete-group", &controllers.ApiController{}, "POST:DeleteGroup") beego.Router("/api/delete-group", &controllers.ApiController{}, "POST:DeleteGroup")
beego.Router("/api/upload-groups", &controllers.ApiController{}, "POST:UploadGroups")
beego.Router("/api/get-global-users", &controllers.ApiController{}, "GET:GetGlobalUsers") beego.Router("/api/get-global-users", &controllers.ApiController{}, "GET:GetGlobalUsers")
beego.Router("/api/get-users", &controllers.ApiController{}, "GET:GetUsers") beego.Router("/api/get-users", &controllers.ApiController{}, "GET:GetUsers")

View File

@@ -132,7 +132,7 @@ func AddScimUser(r *scim.Resource) error {
return errors.ScimErrorUniqueness return errors.ScimErrorUniqueness
} }
affect, err := object.AddUser(newUser) affect, err := object.AddUser(newUser, "en")
if err != nil { if err != nil {
return err return err
} }

View File

@@ -30,6 +30,7 @@ import (
"github.com/go-git/go-git/v5/plumbing/object" "github.com/go-git/go-git/v5/plumbing/object"
"github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/cpu"
"github.com/shirou/gopsutil/mem" "github.com/shirou/gopsutil/mem"
"github.com/shirou/gopsutil/process"
) )
type SystemInfo struct { type SystemInfo struct {
@@ -60,7 +61,17 @@ func getMemoryUsage() (uint64, uint64, error) {
var m runtime.MemStats var m runtime.MemStats
runtime.ReadMemStats(&m) runtime.ReadMemStats(&m)
return m.Alloc, virtualMem.Total, nil proc, err := process.NewProcess(int32(os.Getpid()))
if err != nil {
return 0, 0, err
}
memInfo, err := proc.MemoryInfo()
if err != nil {
return 0, 0, err
}
return memInfo.RSS, virtualMem.Total, nil
} }
func GetSystemInfo() (*SystemInfo, error) { func GetSystemInfo() (*SystemInfo, error) {

View File

@@ -13,7 +13,7 @@
// limitations under the License. // limitations under the License.
import React from "react"; import React from "react";
import {Button, Card, Col, ConfigProvider, Input, InputNumber, Popover, Radio, Result, Row, Select, Space, Switch, Upload} from "antd"; import {Button, Card, Col, ConfigProvider, Input, InputNumber, Popover, Radio, Result, Row, Select, Space, Switch, Upload, message} from "antd";
import {CopyOutlined, HolderOutlined, LinkOutlined, UploadOutlined, UsergroupAddOutlined} from "@ant-design/icons"; import {CopyOutlined, HolderOutlined, LinkOutlined, UploadOutlined, UsergroupAddOutlined} from "@ant-design/icons";
import * as ApplicationBackend from "./backend/ApplicationBackend"; import * as ApplicationBackend from "./backend/ApplicationBackend";
import * as CertBackend from "./backend/CertBackend"; import * as CertBackend from "./backend/CertBackend";
@@ -279,6 +279,13 @@ class ApplicationEditPage extends React.Component {
</Col> </Col>
<Col span={22} > <Col span={22} >
<Input value={this.state.application.name} disabled={this.state.application.name === "app-built-in"} onChange={e => { <Input value={this.state.application.name} disabled={this.state.application.name === "app-built-in"} onChange={e => {
const value = e.target.value;
if (/[/?:@#&%=+;]/.test(value)) {
const invalidChars = "/ ? : @ # & % = + ;";
const messageText = i18next.t("application:Invalid characters in application name") + ":" + " " + invalidChars;
message.error(messageText);
return;
}
this.updateApplicationField("name", e.target.value); this.updateApplicationField("name", e.target.value);
}} /> }} />
</Col> </Col>

View File

@@ -14,7 +14,8 @@
import React from "react"; import React from "react";
import {Link} from "react-router-dom"; import {Link} from "react-router-dom";
import {Button, Table, Tooltip} from "antd"; import {Button, Table, Tooltip, Upload} from "antd";
import {UploadOutlined} from "@ant-design/icons";
import moment from "moment"; import moment from "moment";
import * as Setting from "./Setting"; import * as Setting from "./Setting";
import * as GroupBackend from "./backend/GroupBackend"; import * as GroupBackend from "./backend/GroupBackend";
@@ -87,6 +88,42 @@ class GroupListPage extends BaseListPage {
}); });
} }
uploadFile(info) {
const {status, response: res} = info.file;
if (status === "done") {
if (res.status === "ok") {
Setting.showMessage("success", "Groups uploaded successfully, refreshing the page");
const {pagination} = this.state;
this.fetch({pagination});
} else {
Setting.showMessage("error", `Groups failed to upload: ${res.msg}`);
}
} else if (status === "error") {
Setting.showMessage("error", "File failed to upload");
}
}
renderUpload() {
const props = {
name: "file",
accept: ".xlsx",
method: "post",
action: `${Setting.ServerUrl}/api/upload-groups`,
withCredentials: true,
onChange: (info) => {
this.uploadFile(info);
},
};
return (
<Upload {...props}>
<Button icon={<UploadOutlined />} id="upload-button" type="primary" size="small">
{i18next.t("group:Upload (.xlsx)")}
</Button>
</Upload>
);
}
renderTable(data) { renderTable(data) {
const columns = [ const columns = [
{ {
@@ -231,7 +268,10 @@ class GroupListPage extends BaseListPage {
title={() => ( title={() => (
<div> <div>
{i18next.t("general:Groups")}&nbsp;&nbsp;&nbsp;&nbsp; {i18next.t("general:Groups")}&nbsp;&nbsp;&nbsp;&nbsp;
<Button type="primary" size="small" onClick={this.addGroup.bind(this)}>{i18next.t("general:Add")}</Button> <Button style={{marginRight: "5px"}} type="primary" size="small" onClick={this.addGroup.bind(this)}>{i18next.t("general:Add")}</Button>
{
this.renderUpload()
}
</div> </div>
)} )}
loading={this.state.loading} loading={this.state.loading}

View File

@@ -13,7 +13,7 @@
// limitations under the License. // limitations under the License.
import React from "react"; import React from "react";
import {Button, Card, Col, Input, InputNumber, Radio, Row, Select, Switch} from "antd"; import {Button, Card, Col, Input, InputNumber, Popconfirm, Radio, Row, Select, Switch} from "antd";
import * as OrganizationBackend from "./backend/OrganizationBackend"; import * as OrganizationBackend from "./backend/OrganizationBackend";
import * as ApplicationBackend from "./backend/ApplicationBackend"; import * as ApplicationBackend from "./backend/ApplicationBackend";
import * as LdapBackend from "./backend/LdapBackend"; import * as LdapBackend from "./backend/LdapBackend";
@@ -270,6 +270,31 @@ class OrganizationEditPage extends React.Component {
}} /> }} />
</Col> </Col>
</Row> </Row>
{
this.state.organization.name === "built-in" ? (
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 19 : 2}>
{Setting.getLabel(i18next.t("organization:Has privilege consent"), i18next.t("organization:Has privilege consent - Tooltip"))} :
</Col>
<Col span={1} >
{
!this.state.organization.hasPrivilegeConsent ? (
<Popconfirm
title={i18next.t("organization:Has privilege consent warning")}
onConfirm={() => {this.updateOrganizationField("hasPrivilegeConsent", !this.state.organization.hasPrivilegeConsent);}}
okText={i18next.t("general:OK")}
cancelText={i18next.t("general:Cancel")}
styles={{root: {width: "800px"}}}
>
<Switch checked={this.state.organization.hasPrivilegeConsent} />
</Popconfirm>
) :
<Switch checked={this.state.organization.hasPrivilegeConsent} onChange={() => {this.updateOrganizationField("hasPrivilegeConsent", !this.state.organization.hasPrivilegeConsent);}} />
}
</Col>
</Row>
) : null
}
<Row style={{marginTop: "20px"}} > <Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}> <Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:Password type"), i18next.t("general:Password type - Tooltip"))} : {Setting.getLabel(i18next.t("general:Password type"), i18next.t("general:Password type - Tooltip"))} :

View File

@@ -288,6 +288,16 @@ class ProductEditPage extends React.Component {
}} /> }} />
</Col> </Col>
</Row> </Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("product:Success URL"), i18next.t("product:Success URL - Tooltip"))} :
</Col>
<Col span={22} >
<Input prefix={<LinkOutlined />} value={this.state.product.successUrl} onChange={e => {
this.updateProductField("successUrl", e.target.value);
}} />
</Col>
</Row>
<Row style={{marginTop: "20px"}} > <Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}> <Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
{Setting.getLabel(i18next.t("general:State"), i18next.t("general:State - Tooltip"))} : {Setting.getLabel(i18next.t("general:State"), i18next.t("general:State - Tooltip"))} :

View File

@@ -371,11 +371,6 @@ class ProviderEditPage extends React.Component {
{id: "Third-party", name: i18next.t("provider:Third-party")}, {id: "Third-party", name: i18next.t("provider:Third-party")},
] ]
); );
} else if (type === "Aliyun Captcha") {
return [
{id: "nc", name: i18next.t("provider:Sliding Validation")},
{id: "ic", name: i18next.t("provider:Intelligent Validation")},
];
} else { } else {
return []; return [];
} }
@@ -674,7 +669,7 @@ class ProviderEditPage extends React.Component {
</Col> </Col>
</Row> </Row>
{ {
this.state.provider.type !== "WeCom" && this.state.provider.type !== "Infoflow" && this.state.provider.type !== "Aliyun Captcha" ? null : ( this.state.provider.type !== "WeCom" && this.state.provider.type !== "Infoflow" ? null : (
<React.Fragment> <React.Fragment>
<Row style={{marginTop: "20px"}} > <Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={2}> <Col style={{marginTop: "5px"}} span={2}>

View File

@@ -278,7 +278,7 @@ const authInfo = {
endpoint: "https://www.tiktok.com/auth/authorize/", endpoint: "https://www.tiktok.com/auth/authorize/",
}, },
Tumblr: { Tumblr: {
scope: "email", scope: "basic",
endpoint: "https://www.tumblr.com/oauth2/authorize", endpoint: "https://www.tumblr.com/oauth2/authorize",
}, },
Twitch: { Twitch: {

View File

@@ -85,22 +85,31 @@ export const CaptchaWidget = (props) => {
break; break;
} }
case "Aliyun Captcha": { case "Aliyun Captcha": {
window.AliyunCaptchaConfig = {
region: "cn",
prefix: clientSecret2,
};
const AWSCTimer = setInterval(() => { const AWSCTimer = setInterval(() => {
if (!window.AWSC) { if (!window.initAliyunCaptcha) {
loadScript("https://g.alicdn.com/AWSC/AWSC/awsc.js"); loadScript("https://o.alicdn.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js");
} }
if (window.AWSC) { if (window.initAliyunCaptcha) {
if (clientSecret2 && clientSecret2 !== "***") { if (clientSecret2 && clientSecret2 !== "***") {
window.AWSC.use(subType, function(state, module) { window.initAliyunCaptcha({
module.init({ SceneId: clientId2,
appkey: clientSecret2, mode: "embed",
scene: clientId2, element: "#captcha",
renderTo: "captcha", captchaVerifyCallback: (data) => {
success: function(data) { onChange(data.toString());
onChange(`SessionId=${data.sessionId}&AccessKeyId=${siteKey}&Scene=${clientId2}&AppKey=${clientSecret2}&Token=${data.token}&Sig=${data.sig}&RemoteIp=192.168.0.1`);
}, },
}); slideStyle: {
width: 320,
height: 40,
},
language: "cn",
immediate: true,
}); });
} }
clearInterval(AWSCTimer); clearInterval(AWSCTimer);

View File

@@ -44,6 +44,12 @@ export const CaptchaModal = (props) => {
} }
}, [visible]); }, [visible]);
useEffect(() => {
if (captchaToken !== "" && captchaType !== "Default") {
handleOk();
}
}, [captchaToken]);
const handleOk = () => { const handleOk = () => {
onOk?.(captchaType, captchaToken, clientSecret); onOk?.(captchaType, captchaToken, clientSecret);
}; };
@@ -138,19 +144,18 @@ export const CaptchaModal = (props) => {
if (!regex.test(captchaToken)) { if (!regex.test(captchaToken)) {
isOkDisabled = true; isOkDisabled = true;
} }
} else if (captchaToken === "") {
isOkDisabled = true;
}
return [ return [
<Button key="cancel" onClick={handleCancel}>{i18next.t("general:Cancel")}</Button>, null,
<Button key="ok" disabled={isOkDisabled} type="primary" onClick={handleOk}>{i18next.t("general:OK")}</Button>, <Button key="ok" disabled={isOkDisabled} type="primary" onClick={handleOk}>{i18next.t("general:OK")}</Button>,
]; ];
}
return null;
}; };
return ( return (
<Modal <Modal
closable={false} closable={true}
maskClosable={false} maskClosable={false}
destroyOnClose={true} destroyOnClose={true}
title={i18next.t("general:Captcha")} title={i18next.t("general:Captcha")}
@@ -160,6 +165,7 @@ export const CaptchaModal = (props) => {
width={350} width={350}
footer={renderFooter()} footer={renderFooter()}
onCancel={handleCancel} onCancel={handleCancel}
afterClose={handleCancel}
onOk={handleOk} onOk={handleOk}
> >
<div style={{marginTop: "20px", marginBottom: "50px"}}> <div style={{marginTop: "20px", marginBottom: "50px"}}>

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Left", "Left": "Left",
"Logged in successfully": "Logged in successfully", "Logged in successfully": "Logged in successfully",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "All", "All": "All",
"Edit Organization": "Edit Organization", "Edit Organization": "Edit Organization",
"Follow global theme": "Follow global theme", "Follow global theme": "Follow global theme",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Init score", "Init score": "Init score",
"Init score - Tooltip": "Initial score points awarded to users upon registration", "Init score - Tooltip": "Initial score points awarded to users upon registration",
"Is profile public": "Is profile public", "Is profile public": "Is profile public",
@@ -775,6 +780,8 @@
"Sold": "Sold", "Sold": "Sold",
"Sold - Tooltip": "Quantity sold", "Sold - Tooltip": "Quantity sold",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag of product", "Tag - Tooltip": "Tag of product",
"Test buy page..": "Test buy page..", "Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.", "There is no payment channel for this product.": "There is no payment channel for this product.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Name of host", "Host - Tooltip": "Name of host",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP certificate", "IdP certificate": "IdP certificate",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "Issuer URL", "Issuer URL": "Issuer URL",
"Issuer URL - Tooltip": "Issuer URL", "Issuer URL - Tooltip": "Issuer URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Site key", "Site key": "Site key",
"Site key - Tooltip": "Site key", "Site key - Tooltip": "Site key",
"Sliding Validation": "Sliding Validation",
"Sub type": "Sub type", "Sub type": "Sub type",
"Sub type - Tooltip": "Sub type", "Sub type - Tooltip": "Sub type",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Přizpůsobit hlavičku vstupní stránky vaší aplikace", "Header HTML - Tooltip": "Přizpůsobit hlavičku vstupní stránky vaší aplikace",
"Incremental": "Inkrementální", "Incremental": "Inkrementální",
"Input": "Vstup", "Input": "Vstup",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Kód pozvánky", "Invitation code": "Kód pozvánky",
"Left": "Vlevo", "Left": "Vlevo",
"Logged in successfully": "Úspěšně přihlášen", "Logged in successfully": "Úspěšně přihlášen",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Nadřazená skupina - Tooltip", "Parent group - Tooltip": "Nadřazená skupina - Tooltip",
"Physical": "Fyzická", "Physical": "Fyzická",
"Show all": "Zobrazit vše", "Show all": "Zobrazit vše",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtuální", "Virtual": "Virtuální",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "Vše", "All": "Vše",
"Edit Organization": "Upravit organizaci", "Edit Organization": "Upravit organizaci",
"Follow global theme": "Sledovat globální téma", "Follow global theme": "Sledovat globální téma",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Počáteční skóre", "Init score": "Počáteční skóre",
"Init score - Tooltip": "Počáteční body udělené uživatelům při registraci", "Init score - Tooltip": "Počáteční body udělené uživatelům při registraci",
"Is profile public": "Je profil veřejný", "Is profile public": "Je profil veřejný",
@@ -775,6 +780,8 @@
"Sold": "Prodáno", "Sold": "Prodáno",
"Sold - Tooltip": "Prodávané množství", "Sold - Tooltip": "Prodávané množství",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Štítek produktu", "Tag - Tooltip": "Štítek produktu",
"Test buy page..": "Testovací stránka nákupu..", "Test buy page..": "Testovací stránka nákupu..",
"There is no payment channel for this product.": "Pro tento produkt neexistuje žádný platební kanál.", "There is no payment channel for this product.": "Pro tento produkt neexistuje žádný platební kanál.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Název hostitele", "Host - Tooltip": "Název hostitele",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "Certifikát IdP", "IdP certificate": "Certifikát IdP",
"Intelligent Validation": "Inteligentní validace",
"Internal": "Interní", "Internal": "Interní",
"Issuer URL": "URL vydavatele", "Issuer URL": "URL vydavatele",
"Issuer URL - Tooltip": "URL vydavatele", "Issuer URL - Tooltip": "URL vydavatele",
@@ -943,7 +949,6 @@
"Silent": "Tiché", "Silent": "Tiché",
"Site key": "Klíč stránky", "Site key": "Klíč stránky",
"Site key - Tooltip": "Nápověda ke klíči stránky", "Site key - Tooltip": "Nápověda ke klíči stránky",
"Sliding Validation": "Posuvné ověření",
"Sub type": "Podtyp", "Sub type": "Podtyp",
"Sub type - Tooltip": "Nápověda k podtypu", "Sub type - Tooltip": "Nápověda k podtypu",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Links", "Left": "Links",
"Logged in successfully": "Erfolgreich eingeloggt", "Logged in successfully": "Erfolgreich eingeloggt",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "Alle", "All": "Alle",
"Edit Organization": "Organisation bearbeiten", "Edit Organization": "Organisation bearbeiten",
"Follow global theme": "Folge dem globalen Theme", "Follow global theme": "Folge dem globalen Theme",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Initialer Score", "Init score": "Initialer Score",
"Init score - Tooltip": "Anfangspunkte, die Benutzern bei der Registrierung vergeben werden", "Init score - Tooltip": "Anfangspunkte, die Benutzern bei der Registrierung vergeben werden",
"Is profile public": "Ist das Profil öffentlich?", "Is profile public": "Ist das Profil öffentlich?",
@@ -775,6 +780,8 @@
"Sold": "Verkauft", "Sold": "Verkauft",
"Sold - Tooltip": "Menge verkauft", "Sold - Tooltip": "Menge verkauft",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag des Produkts", "Tag - Tooltip": "Tag des Produkts",
"Test buy page..": "Testkaufseite.", "Test buy page..": "Testkaufseite.",
"There is no payment channel for this product.": "Es gibt keinen Zahlungskanal für dieses Produkt.", "There is no payment channel for this product.": "Es gibt keinen Zahlungskanal für dieses Produkt.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Name des Hosts", "Host - Tooltip": "Name des Hosts",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP-Zertifikat", "IdP certificate": "IdP-Zertifikat",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "Issuer-URL", "Issuer URL": "Issuer-URL",
"Issuer URL - Tooltip": "Emittenten-URL", "Issuer URL - Tooltip": "Emittenten-URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Site-Key", "Site key": "Site-Key",
"Site key - Tooltip": "Seitenschlüssel", "Site key - Tooltip": "Seitenschlüssel",
"Sliding Validation": "Sliding Validation",
"Sub type": "Untertyp", "Sub type": "Untertyp",
"Sub type - Tooltip": "Unterart", "Sub type - Tooltip": "Unterart",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Left", "Left": "Left",
"Logged in successfully": "Logged in successfully", "Logged in successfully": "Logged in successfully",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "All", "All": "All",
"Edit Organization": "Edit Organization", "Edit Organization": "Edit Organization",
"Follow global theme": "Follow global theme", "Follow global theme": "Follow global theme",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Init score", "Init score": "Init score",
"Init score - Tooltip": "Initial score points awarded to users upon registration", "Init score - Tooltip": "Initial score points awarded to users upon registration",
"Is profile public": "Is profile public", "Is profile public": "Is profile public",
@@ -775,6 +780,8 @@
"Sold": "Sold", "Sold": "Sold",
"Sold - Tooltip": "Quantity sold", "Sold - Tooltip": "Quantity sold",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag of product", "Tag - Tooltip": "Tag of product",
"Test buy page..": "Test buy page..", "Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.", "There is no payment channel for this product.": "There is no payment channel for this product.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Name of host", "Host - Tooltip": "Name of host",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP certificate", "IdP certificate": "IdP certificate",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "Issuer URL", "Issuer URL": "Issuer URL",
"Issuer URL - Tooltip": "Issuer URL", "Issuer URL - Tooltip": "Issuer URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Site key", "Site key": "Site key",
"Site key - Tooltip": "Site key", "Site key - Tooltip": "Site key",
"Sliding Validation": "Sliding Validation",
"Sub type": "Sub type", "Sub type": "Sub type",
"Sub type - Tooltip": "Sub type", "Sub type - Tooltip": "Sub type",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Izquierda", "Left": "Izquierda",
"Logged in successfully": "Acceso satisfactorio", "Logged in successfully": "Acceso satisfactorio",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "Toda", "All": "Toda",
"Edit Organization": "Editar organización", "Edit Organization": "Editar organización",
"Follow global theme": "Seguir el tema global", "Follow global theme": "Seguir el tema global",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Puntuación de inicio", "Init score": "Puntuación de inicio",
"Init score - Tooltip": "Puntos de puntuación inicial otorgados a los usuarios al registrarse", "Init score - Tooltip": "Puntos de puntuación inicial otorgados a los usuarios al registrarse",
"Is profile public": "Es el perfil público", "Is profile public": "Es el perfil público",
@@ -775,6 +780,8 @@
"Sold": "Vendido", "Sold": "Vendido",
"Sold - Tooltip": "Cantidad vendida", "Sold - Tooltip": "Cantidad vendida",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Etiqueta de producto", "Tag - Tooltip": "Etiqueta de producto",
"Test buy page..": "Página de compra de prueba.", "Test buy page..": "Página de compra de prueba.",
"There is no payment channel for this product.": "No hay canal de pago para este producto.", "There is no payment channel for this product.": "No hay canal de pago para este producto.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Nombre del anfitrión", "Host - Tooltip": "Nombre del anfitrión",
"IdP": "IdP = Proveedor de Identidad", "IdP": "IdP = Proveedor de Identidad",
"IdP certificate": "Certificado de proveedor de identidad (IdP)", "IdP certificate": "Certificado de proveedor de identidad (IdP)",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "URL del emisor", "Issuer URL": "URL del emisor",
"Issuer URL - Tooltip": "URL del emisor", "Issuer URL - Tooltip": "URL del emisor",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Clave del sitio", "Site key": "Clave del sitio",
"Site key - Tooltip": "Clave del sitio", "Site key - Tooltip": "Clave del sitio",
"Sliding Validation": "Sliding Validation",
"Sub type": "Subtipo", "Sub type": "Subtipo",
"Sub type - Tooltip": "Subtipo", "Sub type - Tooltip": "Subtipo",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "کد head صفحه ورود برنامه خود را سفارشی کنید", "Header HTML - Tooltip": "کد head صفحه ورود برنامه خود را سفارشی کنید",
"Incremental": "افزایشی", "Incremental": "افزایشی",
"Input": "ورودی", "Input": "ورودی",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "کد دعوت", "Invitation code": "کد دعوت",
"Left": "چپ", "Left": "چپ",
"Logged in successfully": "با موفقیت وارد شدید", "Logged in successfully": "با موفقیت وارد شدید",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "گروه والد - راهنمای ابزار", "Parent group - Tooltip": "گروه والد - راهنمای ابزار",
"Physical": "فیزیکی", "Physical": "فیزیکی",
"Show all": "نمایش همه", "Show all": "نمایش همه",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "مجازی", "Virtual": "مجازی",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "همه", "All": "همه",
"Edit Organization": "ویرایش سازمان", "Edit Organization": "ویرایش سازمان",
"Follow global theme": "پیروی از تم جهانی", "Follow global theme": "پیروی از تم جهانی",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "امتیاز اولیه", "Init score": "امتیاز اولیه",
"Init score - Tooltip": "امتیاز اولیه‌ای که به کاربران هنگام ثبت‌نام اعطا می‌شود", "Init score - Tooltip": "امتیاز اولیه‌ای که به کاربران هنگام ثبت‌نام اعطا می‌شود",
"Is profile public": "پروفایل عمومی است", "Is profile public": "پروفایل عمومی است",
@@ -775,6 +780,8 @@
"Sold": "فروخته شده", "Sold": "فروخته شده",
"Sold - Tooltip": "تعداد فروخته شده", "Sold - Tooltip": "تعداد فروخته شده",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "برچسب محصول", "Tag - Tooltip": "برچسب محصول",
"Test buy page..": "صفحه تست خرید..", "Test buy page..": "صفحه تست خرید..",
"There is no payment channel for this product.": "برای این محصول کانال پرداختی وجود ندارد.", "There is no payment channel for this product.": "برای این محصول کانال پرداختی وجود ندارد.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "نام میزبان", "Host - Tooltip": "نام میزبان",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "گواهی IdP", "IdP certificate": "گواهی IdP",
"Intelligent Validation": "اعتبارسنجی هوشمند",
"Internal": "داخلی", "Internal": "داخلی",
"Issuer URL": "آدرس صادرکننده", "Issuer URL": "آدرس صادرکننده",
"Issuer URL - Tooltip": "آدرس صادرکننده", "Issuer URL - Tooltip": "آدرس صادرکننده",
@@ -943,7 +949,6 @@
"Silent": "بی‌صدا", "Silent": "بی‌صدا",
"Site key": "کلید سایت", "Site key": "کلید سایت",
"Site key - Tooltip": "کلید سایت", "Site key - Tooltip": "کلید سایت",
"Sliding Validation": "اعتبارسنجی کشویی",
"Sub type": "زیرنوع", "Sub type": "زیرنوع",
"Sub type - Tooltip": "زیرنوع", "Sub type - Tooltip": "زیرنوع",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Left", "Left": "Left",
"Logged in successfully": "Logged in successfully", "Logged in successfully": "Logged in successfully",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "All", "All": "All",
"Edit Organization": "Edit Organization", "Edit Organization": "Edit Organization",
"Follow global theme": "Follow global theme", "Follow global theme": "Follow global theme",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Init score", "Init score": "Init score",
"Init score - Tooltip": "Initial score points awarded to users upon registration", "Init score - Tooltip": "Initial score points awarded to users upon registration",
"Is profile public": "Is profile public", "Is profile public": "Is profile public",
@@ -775,6 +780,8 @@
"Sold": "Sold", "Sold": "Sold",
"Sold - Tooltip": "Quantity sold", "Sold - Tooltip": "Quantity sold",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag of product", "Tag - Tooltip": "Tag of product",
"Test buy page..": "Test buy page..", "Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.", "There is no payment channel for this product.": "There is no payment channel for this product.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Name of host", "Host - Tooltip": "Name of host",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP certificate", "IdP certificate": "IdP certificate",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "Issuer URL", "Issuer URL": "Issuer URL",
"Issuer URL - Tooltip": "Issuer URL", "Issuer URL - Tooltip": "Issuer URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Site key", "Site key": "Site key",
"Site key - Tooltip": "Site key", "Site key - Tooltip": "Site key",
"Sliding Validation": "Sliding Validation",
"Sub type": "Sub type", "Sub type": "Sub type",
"Sub type - Tooltip": "Sub type", "Sub type - Tooltip": "Sub type",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incrémentale", "Incremental": "Incrémentale",
"Input": "Saisie", "Input": "Saisie",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Code d'invitation", "Invitation code": "Code d'invitation",
"Left": "Gauche", "Left": "Gauche",
"Logged in successfully": "Connexion réussie", "Logged in successfully": "Connexion réussie",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Groupe parent - Infobulle", "Parent group - Tooltip": "Groupe parent - Infobulle",
"Physical": "Physique", "Physical": "Physique",
"Show all": "Tout afficher", "Show all": "Tout afficher",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtuel", "Virtual": "Virtuel",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "Tout", "All": "Tout",
"Edit Organization": "Modifier l'organisation", "Edit Organization": "Modifier l'organisation",
"Follow global theme": "Suivre le thème global", "Follow global theme": "Suivre le thème global",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Score initial", "Init score": "Score initial",
"Init score - Tooltip": "Score initial attribué au compte lors de leur inscription", "Init score - Tooltip": "Score initial attribué au compte lors de leur inscription",
"Is profile public": "Est-ce que le profil est public ?", "Is profile public": "Est-ce que le profil est public ?",
@@ -775,6 +780,8 @@
"Sold": "Vendu", "Sold": "Vendu",
"Sold - Tooltip": "Quantité vendue", "Sold - Tooltip": "Quantité vendue",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Étiquette de produit", "Tag - Tooltip": "Étiquette de produit",
"Test buy page..": "Page d'achat de test.", "Test buy page..": "Page d'achat de test.",
"There is no payment channel for this product.": "Il n'y a aucun canal de paiement pour ce produit.", "There is no payment channel for this product.": "Il n'y a aucun canal de paiement pour ce produit.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Nom d'hôte", "Host - Tooltip": "Nom d'hôte",
"IdP": "IdP (Identité Fournisseur)", "IdP": "IdP (Identité Fournisseur)",
"IdP certificate": "Certificat IdP", "IdP certificate": "Certificat IdP",
"Intelligent Validation": "Validation intelligente",
"Internal": "Interne", "Internal": "Interne",
"Issuer URL": "URL de l'émetteur", "Issuer URL": "URL de l'émetteur",
"Issuer URL - Tooltip": "URL de l'émetteur", "Issuer URL - Tooltip": "URL de l'émetteur",
@@ -943,7 +949,6 @@
"Silent": "Silencieux", "Silent": "Silencieux",
"Site key": "Clé de site", "Site key": "Clé de site",
"Site key - Tooltip": "Clé de site", "Site key - Tooltip": "Clé de site",
"Sliding Validation": "Validation glissante",
"Sub type": "Sous-type", "Sub type": "Sous-type",
"Sub type - Tooltip": "Sous-type", "Sub type - Tooltip": "Sous-type",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Left", "Left": "Left",
"Logged in successfully": "Logged in successfully", "Logged in successfully": "Logged in successfully",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "All", "All": "All",
"Edit Organization": "Edit Organization", "Edit Organization": "Edit Organization",
"Follow global theme": "Follow global theme", "Follow global theme": "Follow global theme",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Init score", "Init score": "Init score",
"Init score - Tooltip": "Initial score points awarded to users upon registration", "Init score - Tooltip": "Initial score points awarded to users upon registration",
"Is profile public": "Is profile public", "Is profile public": "Is profile public",
@@ -775,6 +780,8 @@
"Sold": "Sold", "Sold": "Sold",
"Sold - Tooltip": "Quantity sold", "Sold - Tooltip": "Quantity sold",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag of product", "Tag - Tooltip": "Tag of product",
"Test buy page..": "Test buy page..", "Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.", "There is no payment channel for this product.": "There is no payment channel for this product.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Name of host", "Host - Tooltip": "Name of host",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP certificate", "IdP certificate": "IdP certificate",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "Issuer URL", "Issuer URL": "Issuer URL",
"Issuer URL - Tooltip": "Issuer URL", "Issuer URL - Tooltip": "Issuer URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Site key", "Site key": "Site key",
"Site key - Tooltip": "Site key", "Site key - Tooltip": "Site key",
"Sliding Validation": "Sliding Validation",
"Sub type": "Sub type", "Sub type": "Sub type",
"Sub type - Tooltip": "Sub type", "Sub type - Tooltip": "Sub type",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Kiri", "Left": "Kiri",
"Logged in successfully": "Berhasil masuk", "Logged in successfully": "Berhasil masuk",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "Semua", "All": "Semua",
"Edit Organization": "Edit Organisasi", "Edit Organization": "Edit Organisasi",
"Follow global theme": "Ikuti tema global", "Follow global theme": "Ikuti tema global",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Skor awal", "Init score": "Skor awal",
"Init score - Tooltip": "Poin skor awal diberikan kepada pengguna saat pendaftaran", "Init score - Tooltip": "Poin skor awal diberikan kepada pengguna saat pendaftaran",
"Is profile public": "Apakah profilnya publik?", "Is profile public": "Apakah profilnya publik?",
@@ -775,6 +780,8 @@
"Sold": "Terjual", "Sold": "Terjual",
"Sold - Tooltip": "Jumlah terjual", "Sold - Tooltip": "Jumlah terjual",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag produk", "Tag - Tooltip": "Tag produk",
"Test buy page..": "Halaman pembelian uji coba.", "Test buy page..": "Halaman pembelian uji coba.",
"There is no payment channel for this product.": "Tidak ada saluran pembayaran untuk produk ini.", "There is no payment channel for this product.": "Tidak ada saluran pembayaran untuk produk ini.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Nama tuan rumah", "Host - Tooltip": "Nama tuan rumah",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "Sertifikat IdP", "IdP certificate": "Sertifikat IdP",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "URL penerbit", "Issuer URL": "URL penerbit",
"Issuer URL - Tooltip": "URL Penerbit", "Issuer URL - Tooltip": "URL Penerbit",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Kunci situs", "Site key": "Kunci situs",
"Site key - Tooltip": "Kunci situs atau kunci halaman web", "Site key - Tooltip": "Kunci situs atau kunci halaman web",
"Sliding Validation": "Sliding Validation",
"Sub type": "Sub jenis", "Sub type": "Sub jenis",
"Sub type - Tooltip": "Sub jenis", "Sub type - Tooltip": "Sub jenis",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Left", "Left": "Left",
"Logged in successfully": "Logged in successfully", "Logged in successfully": "Logged in successfully",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "All", "All": "All",
"Edit Organization": "Edit Organization", "Edit Organization": "Edit Organization",
"Follow global theme": "Follow global theme", "Follow global theme": "Follow global theme",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Init score", "Init score": "Init score",
"Init score - Tooltip": "Initial score points awarded to users upon registration", "Init score - Tooltip": "Initial score points awarded to users upon registration",
"Is profile public": "Is profile public", "Is profile public": "Is profile public",
@@ -775,6 +780,8 @@
"Sold": "Sold", "Sold": "Sold",
"Sold - Tooltip": "Quantity sold", "Sold - Tooltip": "Quantity sold",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag of product", "Tag - Tooltip": "Tag of product",
"Test buy page..": "Test buy page..", "Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.", "There is no payment channel for this product.": "There is no payment channel for this product.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Name of host", "Host - Tooltip": "Name of host",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP certificate", "IdP certificate": "IdP certificate",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "Issuer URL", "Issuer URL": "Issuer URL",
"Issuer URL - Tooltip": "Issuer URL", "Issuer URL - Tooltip": "Issuer URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Site key", "Site key": "Site key",
"Site key - Tooltip": "Site key", "Site key - Tooltip": "Site key",
"Sliding Validation": "Sliding Validation",
"Sub type": "Sub type", "Sub type": "Sub type",
"Sub type - Tooltip": "Sub type", "Sub type - Tooltip": "Sub type",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "左", "Left": "左",
"Logged in successfully": "正常にログインしました", "Logged in successfully": "正常にログインしました",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "全て", "All": "全て",
"Edit Organization": "組織の編集", "Edit Organization": "組織の編集",
"Follow global theme": "グローバルテーマに従ってください", "Follow global theme": "グローバルテーマに従ってください",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "イニットスコア", "Init score": "イニットスコア",
"Init score - Tooltip": "登録時にユーザーに与えられる初期スコアポイント", "Init score - Tooltip": "登録時にユーザーに与えられる初期スコアポイント",
"Is profile public": "プロフィールは公開されていますか?", "Is profile public": "プロフィールは公開されていますか?",
@@ -775,6 +780,8 @@
"Sold": "売れました", "Sold": "売れました",
"Sold - Tooltip": "販売数量", "Sold - Tooltip": "販売数量",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "製品のタグ", "Tag - Tooltip": "製品のタグ",
"Test buy page..": "テスト購入ページ。", "Test buy page..": "テスト購入ページ。",
"There is no payment channel for this product.": "この製品には支払いチャネルがありません。", "There is no payment channel for this product.": "この製品には支払いチャネルがありません。",
@@ -857,7 +864,6 @@
"Host - Tooltip": "ホストの名前", "Host - Tooltip": "ホストの名前",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP証明書", "IdP certificate": "IdP証明書",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "発行者のURL", "Issuer URL": "発行者のURL",
"Issuer URL - Tooltip": "発行者URL", "Issuer URL - Tooltip": "発行者URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "サイトキー", "Site key": "サイトキー",
"Site key - Tooltip": "サイトキー", "Site key - Tooltip": "サイトキー",
"Sliding Validation": "Sliding Validation",
"Sub type": "サブタイプ", "Sub type": "サブタイプ",
"Sub type - Tooltip": "サブタイプ", "Sub type - Tooltip": "サブタイプ",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Left", "Left": "Left",
"Logged in successfully": "Logged in successfully", "Logged in successfully": "Logged in successfully",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "All", "All": "All",
"Edit Organization": "Edit Organization", "Edit Organization": "Edit Organization",
"Follow global theme": "Follow global theme", "Follow global theme": "Follow global theme",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Init score", "Init score": "Init score",
"Init score - Tooltip": "Initial score points awarded to users upon registration", "Init score - Tooltip": "Initial score points awarded to users upon registration",
"Is profile public": "Is profile public", "Is profile public": "Is profile public",
@@ -775,6 +780,8 @@
"Sold": "Sold", "Sold": "Sold",
"Sold - Tooltip": "Quantity sold", "Sold - Tooltip": "Quantity sold",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag of product", "Tag - Tooltip": "Tag of product",
"Test buy page..": "Test buy page..", "Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.", "There is no payment channel for this product.": "There is no payment channel for this product.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Name of host", "Host - Tooltip": "Name of host",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP certificate", "IdP certificate": "IdP certificate",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "Issuer URL", "Issuer URL": "Issuer URL",
"Issuer URL - Tooltip": "Issuer URL", "Issuer URL - Tooltip": "Issuer URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Site key", "Site key": "Site key",
"Site key - Tooltip": "Site key", "Site key - Tooltip": "Site key",
"Sliding Validation": "Sliding Validation",
"Sub type": "Sub type", "Sub type": "Sub type",
"Sub type - Tooltip": "Sub type", "Sub type - Tooltip": "Sub type",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "왼쪽", "Left": "왼쪽",
"Logged in successfully": "성공적으로 로그인했습니다", "Logged in successfully": "성공적으로 로그인했습니다",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "모두", "All": "모두",
"Edit Organization": "단체 수정", "Edit Organization": "단체 수정",
"Follow global theme": "글로벌 테마를 따르세요", "Follow global theme": "글로벌 테마를 따르세요",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "처음 점수", "Init score": "처음 점수",
"Init score - Tooltip": "등록 시 초기 점수 부여", "Init score - Tooltip": "등록 시 초기 점수 부여",
"Is profile public": "프로필이 공개적으로 되어 있나요?", "Is profile public": "프로필이 공개적으로 되어 있나요?",
@@ -775,6 +780,8 @@
"Sold": "팔렸습니다", "Sold": "팔렸습니다",
"Sold - Tooltip": "판매량", "Sold - Tooltip": "판매량",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "제품 태그", "Tag - Tooltip": "제품 태그",
"Test buy page..": "시험 구매 페이지.", "Test buy page..": "시험 구매 페이지.",
"There is no payment channel for this product.": "이 제품에 대한 결제 채널이 없습니다.", "There is no payment channel for this product.": "이 제품에 대한 결제 채널이 없습니다.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "호스트의 이름", "Host - Tooltip": "호스트의 이름",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP 인증서", "IdP certificate": "IdP 인증서",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "발행자 URL", "Issuer URL": "발행자 URL",
"Issuer URL - Tooltip": "발급자 URL", "Issuer URL - Tooltip": "발급자 URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "사이트 키", "Site key": "사이트 키",
"Site key - Tooltip": "사이트 키", "Site key - Tooltip": "사이트 키",
"Sliding Validation": "Sliding Validation",
"Sub type": "하위 유형", "Sub type": "하위 유형",
"Sub type - Tooltip": "서브 타입", "Sub type - Tooltip": "서브 타입",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Left", "Left": "Left",
"Logged in successfully": "Logged in successfully", "Logged in successfully": "Logged in successfully",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "All", "All": "All",
"Edit Organization": "Edit Organization", "Edit Organization": "Edit Organization",
"Follow global theme": "Follow global theme", "Follow global theme": "Follow global theme",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Init score", "Init score": "Init score",
"Init score - Tooltip": "Initial score points awarded to users upon registration", "Init score - Tooltip": "Initial score points awarded to users upon registration",
"Is profile public": "Is profile public", "Is profile public": "Is profile public",
@@ -775,6 +780,8 @@
"Sold": "Sold", "Sold": "Sold",
"Sold - Tooltip": "Quantity sold", "Sold - Tooltip": "Quantity sold",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag of product", "Tag - Tooltip": "Tag of product",
"Test buy page..": "Test buy page..", "Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.", "There is no payment channel for this product.": "There is no payment channel for this product.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Name of host", "Host - Tooltip": "Name of host",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP certificate", "IdP certificate": "IdP certificate",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "Issuer URL", "Issuer URL": "Issuer URL",
"Issuer URL - Tooltip": "Issuer URL", "Issuer URL - Tooltip": "Issuer URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Site key", "Site key": "Site key",
"Site key - Tooltip": "Site key", "Site key - Tooltip": "Site key",
"Sliding Validation": "Sliding Validation",
"Sub type": "Sub type", "Sub type": "Sub type",
"Sub type - Tooltip": "Sub type", "Sub type - Tooltip": "Sub type",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Left", "Left": "Left",
"Logged in successfully": "Logged in successfully", "Logged in successfully": "Logged in successfully",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "All", "All": "All",
"Edit Organization": "Edit Organization", "Edit Organization": "Edit Organization",
"Follow global theme": "Follow global theme", "Follow global theme": "Follow global theme",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Init score", "Init score": "Init score",
"Init score - Tooltip": "Initial score points awarded to users upon registration", "Init score - Tooltip": "Initial score points awarded to users upon registration",
"Is profile public": "Is profile public", "Is profile public": "Is profile public",
@@ -775,6 +780,8 @@
"Sold": "Sold", "Sold": "Sold",
"Sold - Tooltip": "Quantity sold", "Sold - Tooltip": "Quantity sold",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag of product", "Tag - Tooltip": "Tag of product",
"Test buy page..": "Test buy page..", "Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.", "There is no payment channel for this product.": "There is no payment channel for this product.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Name of host", "Host - Tooltip": "Name of host",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP certificate", "IdP certificate": "IdP certificate",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "Issuer URL", "Issuer URL": "Issuer URL",
"Issuer URL - Tooltip": "Issuer URL", "Issuer URL - Tooltip": "Issuer URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Site key", "Site key": "Site key",
"Site key - Tooltip": "Site key", "Site key - Tooltip": "Site key",
"Sliding Validation": "Sliding Validation",
"Sub type": "Sub type", "Sub type": "Sub type",
"Sub type - Tooltip": "Sub type", "Sub type - Tooltip": "Sub type",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Left", "Left": "Left",
"Logged in successfully": "Logged in successfully", "Logged in successfully": "Logged in successfully",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "All", "All": "All",
"Edit Organization": "Edit Organization", "Edit Organization": "Edit Organization",
"Follow global theme": "Follow global theme", "Follow global theme": "Follow global theme",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Init score", "Init score": "Init score",
"Init score - Tooltip": "Initial score points awarded to users upon registration", "Init score - Tooltip": "Initial score points awarded to users upon registration",
"Is profile public": "Is profile public", "Is profile public": "Is profile public",
@@ -775,6 +780,8 @@
"Sold": "Sold", "Sold": "Sold",
"Sold - Tooltip": "Quantity sold", "Sold - Tooltip": "Quantity sold",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag of product", "Tag - Tooltip": "Tag of product",
"Test buy page..": "Test buy page..", "Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.", "There is no payment channel for this product.": "There is no payment channel for this product.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Name of host", "Host - Tooltip": "Name of host",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP certificate", "IdP certificate": "IdP certificate",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "Issuer URL", "Issuer URL": "Issuer URL",
"Issuer URL - Tooltip": "Issuer URL", "Issuer URL - Tooltip": "Issuer URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Site key", "Site key": "Site key",
"Site key - Tooltip": "Site key", "Site key - Tooltip": "Site key",
"Sliding Validation": "Sliding Validation",
"Sub type": "Sub type", "Sub type": "Sub type",
"Sub type - Tooltip": "Sub type", "Sub type - Tooltip": "Sub type",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Código de convite", "Invitation code": "Código de convite",
"Left": "Esquerda", "Left": "Esquerda",
"Logged in successfully": "Login realizado com sucesso", "Logged in successfully": "Login realizado com sucesso",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "Todos", "All": "Todos",
"Edit Organization": "Editar Organização", "Edit Organization": "Editar Organização",
"Follow global theme": "Seguir tema global", "Follow global theme": "Seguir tema global",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Pontuação inicial", "Init score": "Pontuação inicial",
"Init score - Tooltip": "Pontos de pontuação inicial concedidos aos usuários no momento do registro", "Init score - Tooltip": "Pontos de pontuação inicial concedidos aos usuários no momento do registro",
"Is profile public": "Perfil é público", "Is profile public": "Perfil é público",
@@ -775,6 +780,8 @@
"Sold": "Vendido", "Sold": "Vendido",
"Sold - Tooltip": "Quantidade vendida", "Sold - Tooltip": "Quantidade vendida",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag do produto", "Tag - Tooltip": "Tag do produto",
"Test buy page..": "Página de teste de compra...", "Test buy page..": "Página de teste de compra...",
"There is no payment channel for this product.": "Não há canal de pagamento disponível para este produto.", "There is no payment channel for this product.": "Não há canal de pagamento disponível para este produto.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Nome do host", "Host - Tooltip": "Nome do host",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "Certificado IdP", "IdP certificate": "Certificado IdP",
"Intelligent Validation": "Validação inteligente",
"Internal": "Interno", "Internal": "Interno",
"Issuer URL": "URL do Emissor", "Issuer URL": "URL do Emissor",
"Issuer URL - Tooltip": "URL do Emissor", "Issuer URL - Tooltip": "URL do Emissor",
@@ -943,7 +949,6 @@
"Silent": "Silencioso", "Silent": "Silencioso",
"Site key": "Chave do site", "Site key": "Chave do site",
"Site key - Tooltip": "Chave do site", "Site key - Tooltip": "Chave do site",
"Sliding Validation": "Validação deslizante",
"Sub type": "Subtipo", "Sub type": "Subtipo",
"Sub type - Tooltip": "Subtipo", "Sub type - Tooltip": "Subtipo",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Последовательный", "Incremental": "Последовательный",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Код приглашения", "Invitation code": "Код приглашения",
"Left": "Левый", "Left": "Левый",
"Logged in successfully": "Успешный вход в систему", "Logged in successfully": "Успешный вход в систему",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "Все", "All": "Все",
"Edit Organization": "Редактировать организацию", "Edit Organization": "Редактировать организацию",
"Follow global theme": "Следуйте глобальной теме", "Follow global theme": "Следуйте глобальной теме",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Начальный балл", "Init score": "Начальный балл",
"Init score - Tooltip": "Первоначальное количество баллов, присваиваемое пользователям при регистрации", "Init score - Tooltip": "Первоначальное количество баллов, присваиваемое пользователям при регистрации",
"Is profile public": "Профиль является публичным?", "Is profile public": "Профиль является публичным?",
@@ -775,6 +780,8 @@
"Sold": "Продано", "Sold": "Продано",
"Sold - Tooltip": "Количество проданных", "Sold - Tooltip": "Количество проданных",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Метка продукта", "Tag - Tooltip": "Метка продукта",
"Test buy page..": "Страница для тестовой покупки.", "Test buy page..": "Страница для тестовой покупки.",
"There is no payment channel for this product.": "Для этого продукта нет канала оплаты.", "There is no payment channel for this product.": "Для этого продукта нет канала оплаты.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Имя хоста", "Host - Tooltip": "Имя хоста",
"IdP": "ИдП", "IdP": "ИдП",
"IdP certificate": "Сертификат IdP", "IdP certificate": "Сертификат IdP",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "URL выпускающего органа", "Issuer URL": "URL выпускающего органа",
"Issuer URL - Tooltip": "URL эмитента", "Issuer URL - Tooltip": "URL эмитента",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Ключ сайта", "Site key": "Ключ сайта",
"Site key - Tooltip": "Ключ сайта", "Site key - Tooltip": "Ключ сайта",
"Sliding Validation": "Sliding Validation",
"Sub type": "Подтип", "Sub type": "Подтип",
"Sub type - Tooltip": "Подтип", "Sub type - Tooltip": "Подтип",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Vlastný HTML kód pre hlavičku vašej vstupnej stránky aplikácie", "Header HTML - Tooltip": "Vlastný HTML kód pre hlavičku vašej vstupnej stránky aplikácie",
"Incremental": "Postupný", "Incremental": "Postupný",
"Input": "Vstup", "Input": "Vstup",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Kód pozvania", "Invitation code": "Kód pozvania",
"Left": "Vľavo", "Left": "Vľavo",
"Logged in successfully": "Úspešne prihlásený", "Logged in successfully": "Úspešne prihlásený",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Nadradená skupina - Nápoveda", "Parent group - Tooltip": "Nadradená skupina - Nápoveda",
"Physical": "Fyzická", "Physical": "Fyzická",
"Show all": "Zobraziť všetko", "Show all": "Zobraziť všetko",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtuálna", "Virtual": "Virtuálna",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "Všetko", "All": "Všetko",
"Edit Organization": "Upraviť organizáciu", "Edit Organization": "Upraviť organizáciu",
"Follow global theme": "Nasledovať globálnu tému", "Follow global theme": "Nasledovať globálnu tému",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Počiatočné skóre", "Init score": "Počiatočné skóre",
"Init score - Tooltip": "Počiatočné skóre body pridelí používateľom pri registrácii", "Init score - Tooltip": "Počiatočné skóre body pridelí používateľom pri registrácii",
"Is profile public": "Je profil verejný", "Is profile public": "Je profil verejný",
@@ -775,6 +780,8 @@
"Sold": "Predané", "Sold": "Predané",
"Sold - Tooltip": "Množstvo predaných kusov", "Sold - Tooltip": "Množstvo predaných kusov",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Štítok produktu", "Tag - Tooltip": "Štítok produktu",
"Test buy page..": "Testovať stránku nákupu..", "Test buy page..": "Testovať stránku nákupu..",
"There is no payment channel for this product.": "Pre tento produkt neexistuje platobný kanál.", "There is no payment channel for this product.": "Pre tento produkt neexistuje platobný kanál.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Názov hostiteľa", "Host - Tooltip": "Názov hostiteľa",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "Certifikát IdP", "IdP certificate": "Certifikát IdP",
"Intelligent Validation": "Inteligentné overenie",
"Internal": "Interný", "Internal": "Interný",
"Issuer URL": "URL vydavateľa", "Issuer URL": "URL vydavateľa",
"Issuer URL - Tooltip": "URL vydavateľa", "Issuer URL - Tooltip": "URL vydavateľa",
@@ -943,7 +949,6 @@
"Silent": "Tichý", "Silent": "Tichý",
"Site key": "Kľúč stránky", "Site key": "Kľúč stránky",
"Site key - Tooltip": "Kľúč stránky", "Site key - Tooltip": "Kľúč stránky",
"Sliding Validation": "Posuvné overenie",
"Sub type": "Podtyp", "Sub type": "Podtyp",
"Sub type - Tooltip": "Podtyp", "Sub type - Tooltip": "Podtyp",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Left", "Left": "Left",
"Logged in successfully": "Logged in successfully", "Logged in successfully": "Logged in successfully",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "All", "All": "All",
"Edit Organization": "Edit Organization", "Edit Organization": "Edit Organization",
"Follow global theme": "Follow global theme", "Follow global theme": "Follow global theme",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Init score", "Init score": "Init score",
"Init score - Tooltip": "Initial score points awarded to users upon registration", "Init score - Tooltip": "Initial score points awarded to users upon registration",
"Is profile public": "Is profile public", "Is profile public": "Is profile public",
@@ -775,6 +780,8 @@
"Sold": "Sold", "Sold": "Sold",
"Sold - Tooltip": "Quantity sold", "Sold - Tooltip": "Quantity sold",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag of product", "Tag - Tooltip": "Tag of product",
"Test buy page..": "Test buy page..", "Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.", "There is no payment channel for this product.": "There is no payment channel for this product.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Name of host", "Host - Tooltip": "Name of host",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP certificate", "IdP certificate": "IdP certificate",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "Issuer URL", "Issuer URL": "Issuer URL",
"Issuer URL - Tooltip": "Issuer URL", "Issuer URL - Tooltip": "Issuer URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Site key", "Site key": "Site key",
"Site key - Tooltip": "Site key", "Site key - Tooltip": "Site key",
"Sliding Validation": "Sliding Validation",
"Sub type": "Sub type", "Sub type": "Sub type",
"Sub type - Tooltip": "Sub type", "Sub type - Tooltip": "Sub type",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Incremental", "Incremental": "Incremental",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Davet Kodu", "Invitation code": "Davet Kodu",
"Left": "Sol", "Left": "Sol",
"Logged in successfully": "Başarıyla giriş yapıldı", "Logged in successfully": "Başarıyla giriş yapıldı",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "Tümü", "All": "Tümü",
"Edit Organization": "Edit Organization", "Edit Organization": "Edit Organization",
"Follow global theme": "Follow global theme", "Follow global theme": "Follow global theme",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Init score", "Init score": "Init score",
"Init score - Tooltip": "Initial score points awarded to users upon registration", "Init score - Tooltip": "Initial score points awarded to users upon registration",
"Is profile public": "Is profile public", "Is profile public": "Is profile public",
@@ -775,6 +780,8 @@
"Sold": "Sold", "Sold": "Sold",
"Sold - Tooltip": "Quantity sold", "Sold - Tooltip": "Quantity sold",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Tag of product", "Tag - Tooltip": "Tag of product",
"Test buy page..": "Test buy page..", "Test buy page..": "Test buy page..",
"There is no payment channel for this product.": "There is no payment channel for this product.", "There is no payment channel for this product.": "There is no payment channel for this product.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Name of host", "Host - Tooltip": "Name of host",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "IdP certificate", "IdP certificate": "IdP certificate",
"Intelligent Validation": "Intelligent Validation",
"Internal": "Internal", "Internal": "Internal",
"Issuer URL": "Issuer URL", "Issuer URL": "Issuer URL",
"Issuer URL - Tooltip": "Issuer URL", "Issuer URL - Tooltip": "Issuer URL",
@@ -943,7 +949,6 @@
"Silent": "Silent", "Silent": "Silent",
"Site key": "Site key", "Site key": "Site key",
"Site key - Tooltip": "Site key", "Site key - Tooltip": "Site key",
"Sliding Validation": "Sliding Validation",
"Sub type": "Sub type", "Sub type": "Sub type",
"Sub type - Tooltip": "Sub type", "Sub type - Tooltip": "Sub type",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Налаштуйте тег head на сторінці входу до програми", "Header HTML - Tooltip": "Налаштуйте тег head на сторінці входу до програми",
"Incremental": "Інкрементний", "Incremental": "Інкрементний",
"Input": "Введення", "Input": "Введення",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Код запрошення", "Invitation code": "Код запрошення",
"Left": "Ліворуч", "Left": "Ліворуч",
"Logged in successfully": "Успішно ввійшли", "Logged in successfully": "Успішно ввійшли",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Батьківська група - підказка", "Parent group - Tooltip": "Батьківська група - підказка",
"Physical": "фізичний", "Physical": "фізичний",
"Show all": "Покажи все", "Show all": "Покажи все",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Віртуальний", "Virtual": "Віртуальний",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "всі", "All": "всі",
"Edit Organization": "Редагувати організацію", "Edit Organization": "Редагувати організацію",
"Follow global theme": "Дотримуйтеся глобальної теми", "Follow global theme": "Дотримуйтеся глобальної теми",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Початкова оцінка", "Init score": "Початкова оцінка",
"Init score - Tooltip": "Початкові бали, нараховані користувачам під час реєстрації", "Init score - Tooltip": "Початкові бали, нараховані користувачам під час реєстрації",
"Is profile public": "Профіль загальнодоступний", "Is profile public": "Профіль загальнодоступний",
@@ -775,6 +780,8 @@
"Sold": "Продано", "Sold": "Продано",
"Sold - Tooltip": "Продана кількість", "Sold - Tooltip": "Продана кількість",
"Stripe": "смужка", "Stripe": "смужка",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Тег товару", "Tag - Tooltip": "Тег товару",
"Test buy page..": "Сторінка тестової покупки..", "Test buy page..": "Сторінка тестової покупки..",
"There is no payment channel for this product.": "Для цього продукту немає платіжного каналу.", "There is no payment channel for this product.": "Для цього продукту немає платіжного каналу.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Ім'я хоста", "Host - Tooltip": "Ім'я хоста",
"IdP": "IDP", "IdP": "IDP",
"IdP certificate": "сертифікат IdP", "IdP certificate": "сертифікат IdP",
"Intelligent Validation": "Інтелектуальна перевірка",
"Internal": "внутрішній", "Internal": "внутрішній",
"Issuer URL": "URL-адреса емітента", "Issuer URL": "URL-адреса емітента",
"Issuer URL - Tooltip": "URL-адреса емітента", "Issuer URL - Tooltip": "URL-адреса емітента",
@@ -943,7 +949,6 @@
"Silent": "Мовчазний", "Silent": "Мовчазний",
"Site key": "Ключ сайту", "Site key": "Ключ сайту",
"Site key - Tooltip": "Ключ сайту", "Site key - Tooltip": "Ключ сайту",
"Sliding Validation": "Ковзна перевірка",
"Sub type": "Підтип", "Sub type": "Підтип",
"Sub type - Tooltip": "Підтип", "Sub type - Tooltip": "Підтип",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "Custom the head tag of your application entry page", "Header HTML - Tooltip": "Custom the head tag of your application entry page",
"Incremental": "Tăng", "Incremental": "Tăng",
"Input": "Input", "Input": "Input",
"Invalid characters in application name": "Invalid characters in application name",
"Invitation code": "Invitation code", "Invitation code": "Invitation code",
"Left": "Trái", "Left": "Trái",
"Logged in successfully": "Đăng nhập thành công", "Logged in successfully": "Đăng nhập thành công",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "Parent group - Tooltip", "Parent group - Tooltip": "Parent group - Tooltip",
"Physical": "Physical", "Physical": "Physical",
"Show all": "Show all", "Show all": "Show all",
"Upload (.xlsx)": "Upload (.xlsx)",
"Virtual": "Virtual", "Virtual": "Virtual",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page"
}, },
@@ -616,6 +618,9 @@
"All": "Tất cả", "All": "Tất cả",
"Edit Organization": "Sửa tổ chức", "Edit Organization": "Sửa tổ chức",
"Follow global theme": "Theo giao diện chung", "Follow global theme": "Theo giao diện chung",
"Has privilege consent": "Has privilege consent",
"Has privilege consent - Tooltip": "Prevent adding users for built-in organization if HasPrivilegeConsent is false",
"Has privilege consent warning": "Adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.",
"Init score": "Điểm khởi tạo", "Init score": "Điểm khởi tạo",
"Init score - Tooltip": "Điểm số ban đầu được trao cho người dùng khi đăng ký", "Init score - Tooltip": "Điểm số ban đầu được trao cho người dùng khi đăng ký",
"Is profile public": "Hồ sơ có công khai không?", "Is profile public": "Hồ sơ có công khai không?",
@@ -775,6 +780,8 @@
"Sold": "Đã bán", "Sold": "Đã bán",
"Sold - Tooltip": "Số lượng bán ra", "Sold - Tooltip": "Số lượng bán ra",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "Success URL",
"Success URL - Tooltip": "URL to return to after purchase",
"Tag - Tooltip": "Nhãn sản phẩm", "Tag - Tooltip": "Nhãn sản phẩm",
"Test buy page..": "Trang mua thử.", "Test buy page..": "Trang mua thử.",
"There is no payment channel for this product.": "Không có kênh thanh toán cho sản phẩm này.", "There is no payment channel for this product.": "Không có kênh thanh toán cho sản phẩm này.",
@@ -857,7 +864,6 @@
"Host - Tooltip": "Tên của người chủ chỗ ở", "Host - Tooltip": "Tên của người chủ chỗ ở",
"IdP": "IdP", "IdP": "IdP",
"IdP certificate": "Chứng chỉ IdP", "IdP certificate": "Chứng chỉ IdP",
"Intelligent Validation": "Xác nhận thông minh",
"Internal": "Nội bộ", "Internal": "Nội bộ",
"Issuer URL": "Địa chỉ URL của người phát hành", "Issuer URL": "Địa chỉ URL của người phát hành",
"Issuer URL - Tooltip": "Địa chỉ URL của nhà phát hành", "Issuer URL - Tooltip": "Địa chỉ URL của nhà phát hành",
@@ -943,7 +949,6 @@
"Silent": "Im lặng", "Silent": "Im lặng",
"Site key": "Khóa trang web", "Site key": "Khóa trang web",
"Site key - Tooltip": "Khóa trang web", "Site key - Tooltip": "Khóa trang web",
"Sliding Validation": "Xác nhận trượt ngang",
"Sub type": "Loại phụ", "Sub type": "Loại phụ",
"Sub type - Tooltip": "Loại phụ", "Sub type - Tooltip": "Loại phụ",
"Subject": "Subject", "Subject": "Subject",

View File

@@ -76,6 +76,7 @@
"Header HTML - Tooltip": "自定义应用页面的head标签", "Header HTML - Tooltip": "自定义应用页面的head标签",
"Incremental": "递增", "Incremental": "递增",
"Input": "输入", "Input": "输入",
"Invalid characters in application name": "应用名称内有非法字符",
"Invitation code": "邀请码", "Invitation code": "邀请码",
"Left": "居左", "Left": "居左",
"Logged in successfully": "登录成功", "Logged in successfully": "登录成功",
@@ -454,6 +455,7 @@
"Parent group - Tooltip": "上级组", "Parent group - Tooltip": "上级组",
"Physical": "实体组", "Physical": "实体组",
"Show all": "显示全部", "Show all": "显示全部",
"Upload (.xlsx)": "上传(.xlsx)",
"Virtual": "虚拟组", "Virtual": "虚拟组",
"You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "您需要先删除所有子组。您可以在 [组织] -\u003e [群组] 页面左侧的群组树中查看子组" "You need to delete all subgroups first. You can view the subgroups in the left group tree of the [Organizations] -\u003e [Groups] page": "您需要先删除所有子组。您可以在 [组织] -\u003e [群组] 页面左侧的群组树中查看子组"
}, },
@@ -616,6 +618,9 @@
"All": "全部", "All": "全部",
"Edit Organization": "编辑组织", "Edit Organization": "编辑组织",
"Follow global theme": "使用全局默认主题", "Follow global theme": "使用全局默认主题",
"Has privilege consent": "特权同意",
"Has privilege consent - Tooltip": "如果为假则禁止为built-in组织新增用户",
"Has privilege consent warning": "目前,向'built-in'组织添加新用户的功能已禁用。请注意:'built-in'组织中的所有用户均为Casdoor的全局管理员。请参阅文档https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself。如果您仍希望为'built-in'组织创建用户,请转到该组织的设置页面并启用“特权同意”选项。",
"Init score": "初始积分", "Init score": "初始积分",
"Init score - Tooltip": "用户注册后所拥有的初始积分", "Init score - Tooltip": "用户注册后所拥有的初始积分",
"Is profile public": "是否公开用户个人页", "Is profile public": "是否公开用户个人页",
@@ -775,6 +780,8 @@
"Sold": "售出", "Sold": "售出",
"Sold - Tooltip": "已售出的数量", "Sold - Tooltip": "已售出的数量",
"Stripe": "Stripe", "Stripe": "Stripe",
"Success URL": "成功URL",
"Success URL - Tooltip": "支付后跳转的URL",
"Tag - Tooltip": "商品类别", "Tag - Tooltip": "商品类别",
"Test buy page..": "测试购买页面..", "Test buy page..": "测试购买页面..",
"There is no payment channel for this product.": "该商品没有付款方式。", "There is no payment channel for this product.": "该商品没有付款方式。",
@@ -857,7 +864,6 @@
"Host - Tooltip": "主机名", "Host - Tooltip": "主机名",
"IdP": "身份提供商", "IdP": "身份提供商",
"IdP certificate": "IdP公钥证书", "IdP certificate": "IdP公钥证书",
"Intelligent Validation": "智能验证",
"Internal": "内部", "Internal": "内部",
"Issuer URL": "Issuer链接", "Issuer URL": "Issuer链接",
"Issuer URL - Tooltip": "Issuer链接URL", "Issuer URL - Tooltip": "Issuer链接URL",
@@ -943,7 +949,6 @@
"Silent": "静默", "Silent": "静默",
"Site key": "Site key", "Site key": "Site key",
"Site key - Tooltip": "站点密钥", "Site key - Tooltip": "站点密钥",
"Sliding Validation": "滑块验证",
"Sub type": "子类型", "Sub type": "子类型",
"Sub type - Tooltip": "子类型", "Sub type - Tooltip": "子类型",
"Subject": "主题", "Subject": "主题",

View File

@@ -100,7 +100,7 @@ class LdapTable extends React.Component {
sorter: (a, b) => a.serverName.localeCompare(b.serverName), sorter: (a, b) => a.serverName.localeCompare(b.serverName),
render: (text, record, index) => { render: (text, record, index) => {
return ( return (
<Link to={`/ldaps/${record.id}`}> <Link to={`/ldap/${record.owner}/${record.id}`}>
{text} {text}
</Link> </Link>
); );

BIN
xlsx/group_test.xlsx Normal file

Binary file not shown.