mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-23 02:35:49 +08:00
Add getCasdoorColumns().
This commit is contained in:
parent
db56f54b8c
commit
e64f181e28
@ -41,7 +41,7 @@ func (syncer *Syncer) syncUsers() {
|
||||
updatedUser := syncer.createUserFromOriginalUser(oUser, affiliationMap)
|
||||
updatedUser.Hash = oHash
|
||||
updatedUser.PreHash = oHash
|
||||
UpdateUserForOriginalFields(updatedUser)
|
||||
syncer.updateUserForOriginalFields(updatedUser)
|
||||
fmt.Printf("Update from oUser to user: %v\n", updatedUser)
|
||||
}
|
||||
} else {
|
||||
@ -62,7 +62,7 @@ func (syncer *Syncer) syncUsers() {
|
||||
updatedUser := syncer.createUserFromOriginalUser(oUser, affiliationMap)
|
||||
updatedUser.Hash = oHash
|
||||
updatedUser.PreHash = oHash
|
||||
UpdateUserForOriginalFields(updatedUser)
|
||||
syncer.updateUserForOriginalFields(updatedUser)
|
||||
fmt.Printf("Update from oUser to user (2nd condition): %v\n", updatedUser)
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ import (
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/casbin/casdoor/util"
|
||||
"xorm.io/core"
|
||||
)
|
||||
|
||||
type OriginalUser = User
|
||||
@ -55,7 +56,7 @@ func (syncer *Syncer) addUser(user *OriginalUser) bool {
|
||||
return affected != 0
|
||||
}
|
||||
|
||||
func (syncer *Syncer) getActiveColumns() []string {
|
||||
func (syncer *Syncer) getOriginalColumns() []string {
|
||||
res := []string{}
|
||||
for _, tableColumn := range syncer.TableColumns {
|
||||
if tableColumn.CasdoorName != "Id" {
|
||||
@ -65,9 +66,20 @@ func (syncer *Syncer) getActiveColumns() []string {
|
||||
return res
|
||||
}
|
||||
|
||||
func (syncer *Syncer) getCasdoorColumns() []string {
|
||||
res := []string{}
|
||||
for _, tableColumn := range syncer.TableColumns {
|
||||
if tableColumn.CasdoorName != "Id" {
|
||||
v := util.CamelToSnakeCase(tableColumn.CasdoorName)
|
||||
res = append(res, v)
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func (syncer *Syncer) updateUser(user *OriginalUser) bool {
|
||||
m := syncer.getMapFromOriginalUser(user)
|
||||
columns := syncer.getActiveColumns()
|
||||
columns := syncer.getOriginalColumns()
|
||||
affected, err := syncer.Adapter.Engine.Table(syncer.Table).ID(syncer.TablePrimaryKey).Cols(columns...).Update(m)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@ -76,12 +88,33 @@ func (syncer *Syncer) updateUser(user *OriginalUser) bool {
|
||||
return affected != 0
|
||||
}
|
||||
|
||||
func (syncer *Syncer) updateUserForOriginalFields(user *User) bool {
|
||||
owner, name := util.GetOwnerAndNameFromId(user.GetId())
|
||||
oldUser := getUser(owner, name)
|
||||
if oldUser == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
if user.Avatar != oldUser.Avatar && user.Avatar != "" {
|
||||
user.PermanentAvatar = getPermanentAvatarUrl(user.Owner, user.Name, user.Avatar)
|
||||
}
|
||||
|
||||
columns := syncer.getCasdoorColumns()
|
||||
columns = append(columns, "affiliation", "hash", "pre_hash")
|
||||
affected, err := adapter.Engine.ID(core.PK{user.Owner, user.Name}).Cols(columns...).Update(user)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return affected != 0
|
||||
}
|
||||
|
||||
func (syncer *Syncer) calculateHash(user *OriginalUser) string {
|
||||
values := []string{}
|
||||
m := syncer.getMapFromOriginalUser(user)
|
||||
for _, tableColumn := range syncer.TableColumns {
|
||||
if tableColumn.IsHashed {
|
||||
values = append(values, m[tableColumn.CasdoorName])
|
||||
values = append(values, m[tableColumn.Name])
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -52,6 +52,7 @@ func (syncer *Syncer) createUserFromOriginalUser(originalUser *OriginalUser, aff
|
||||
if user.Type == "" {
|
||||
user.Type = "normal-user"
|
||||
}
|
||||
user.Avatar = syncer.getFullAvatarUrl(user.Avatar)
|
||||
if originalUser.Score != 0 {
|
||||
affiliation, ok := affiliationMap[originalUser.Score]
|
||||
if !ok {
|
||||
@ -196,7 +197,7 @@ func (syncer *Syncer) getMapFromOriginalUser(user *OriginalUser) map[string]stri
|
||||
|
||||
m2 := map[string]string{}
|
||||
for _, tableColumn := range syncer.TableColumns {
|
||||
m2[tableColumn.CasdoorName] = m[tableColumn.CasdoorName]
|
||||
m2[tableColumn.Name] = m[tableColumn.CasdoorName]
|
||||
}
|
||||
|
||||
return m2
|
||||
|
@ -289,25 +289,6 @@ func UpdateUserForAllFields(id string, user *User) bool {
|
||||
return affected != 0
|
||||
}
|
||||
|
||||
func UpdateUserForOriginalFields(user *User) bool {
|
||||
owner, name := util.GetOwnerAndNameFromId(user.GetId())
|
||||
oldUser := getUser(owner, name)
|
||||
if oldUser == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
if user.Avatar != oldUser.Avatar && user.Avatar != "" {
|
||||
user.PermanentAvatar = getPermanentAvatarUrl(user.Owner, user.Name, user.Avatar)
|
||||
}
|
||||
|
||||
affected, err := adapter.Engine.ID(core.PK{user.Owner, user.Name}).Cols("display_name", "password", "phone", "avatar", "affiliation", "score", "is_forbidden", "hash", "pre_hash").Update(user)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return affected != 0
|
||||
}
|
||||
|
||||
func AddUser(user *User) bool {
|
||||
if user.Id == "" {
|
||||
user.Id = util.GenerateId()
|
||||
|
@ -15,6 +15,7 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
@ -52,6 +53,22 @@ func BoolToString(b bool) string {
|
||||
}
|
||||
}
|
||||
|
||||
func CamelToSnakeCase(camel string) string {
|
||||
var buf bytes.Buffer
|
||||
for _, c := range camel {
|
||||
if 'A' <= c && c <= 'Z' {
|
||||
// just convert [A-Z] to _[a-z]
|
||||
if buf.Len() > 0 {
|
||||
buf.WriteRune('_')
|
||||
}
|
||||
buf.WriteRune(c - 'A' + 'a')
|
||||
} else {
|
||||
buf.WriteRune(c)
|
||||
}
|
||||
}
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
func GetOwnerAndNameFromId(id string) (string, string) {
|
||||
tokens := strings.Split(id, "/")
|
||||
if len(tokens) != 2 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user