Allow global admin to modify username.

This commit is contained in:
Gucheng Wang
2022-01-13 23:19:36 +08:00
parent fe48c38bc6
commit b91b4aec91
5 changed files with 15 additions and 4 deletions

View File

@@ -18,6 +18,7 @@ import (
"time" "time"
"github.com/astaxie/beego" "github.com/astaxie/beego"
"github.com/casbin/casdoor/object"
"github.com/casbin/casdoor/util" "github.com/casbin/casdoor/util"
) )
@@ -35,6 +36,12 @@ type SessionData struct {
ExpireTime int64 ExpireTime int64
} }
func (c *ApiController) IsGlobalAdmin() bool {
username := c.GetSessionUsername()
user := object.GetUser(username)
return user.Owner == "built-in" || user.IsGlobalAdmin
}
// GetSessionUsername ... // GetSessionUsername ...
func (c *ApiController) GetSessionUsername() string { func (c *ApiController) GetSessionUsername() string {
// check if user session expired // check if user session expired

View File

@@ -202,7 +202,7 @@ func (c *ApiController) UploadResource() {
} }
user.Avatar = fileUrl user.Avatar = fileUrl
object.UpdateUser(user.GetId(), user, []string{"avatar"}) object.UpdateUser(user.GetId(), user, []string{"avatar"}, false)
case "termsOfUse": case "termsOfUse":
applicationId := fmt.Sprintf("admin/%s", parent) applicationId := fmt.Sprintf("admin/%s", parent)
app := object.GetApplication(applicationId) app := object.GetApplication(applicationId)

View File

@@ -125,7 +125,8 @@ func (c *ApiController) UpdateUser() {
columns = strings.Split(columnsStr, ",") columns = strings.Split(columnsStr, ",")
} }
affected := object.UpdateUser(id, &user, columns) isGlobalAdmin := c.IsGlobalAdmin()
affected := object.UpdateUser(id, &user, columns, isGlobalAdmin)
if affected { if affected {
object.UpdateUserToOriginalDatabase(&user) object.UpdateUserToOriginalDatabase(&user)
} }

View File

@@ -270,7 +270,7 @@ func GetLastUser(owner string) *User {
return nil return nil
} }
func UpdateUser(id string, user *User, columns []string) bool { func UpdateUser(id string, user *User, columns []string, isGlobalAdmin bool) bool {
owner, name := util.GetOwnerAndNameFromIdNoCheck(id) owner, name := util.GetOwnerAndNameFromIdNoCheck(id)
oldUser := getUser(owner, name) oldUser := getUser(owner, name)
if oldUser == nil { if oldUser == nil {
@@ -288,6 +288,9 @@ func UpdateUser(id string, user *User, columns []string) bool {
"location", "address", "region", "language", "affiliation", "title", "homepage", "bio", "score", "tag", "location", "address", "region", "language", "affiliation", "title", "homepage", "bio", "score", "tag",
"is_admin", "is_global_admin", "is_forbidden", "is_deleted", "hash", "is_default_avatar", "properties"} "is_admin", "is_global_admin", "is_forbidden", "is_deleted", "hash", "is_default_avatar", "properties"}
} }
if isGlobalAdmin {
columns = append(columns, "name")
}
affected, err := adapter.Engine.ID(core.PK{owner, name}).Cols(columns...).Update(user) affected, err := adapter.Engine.ID(core.PK{owner, name}).Cols(columns...).Update(user)
if err != nil { if err != nil {

View File

@@ -140,7 +140,7 @@ class UserEditPage extends React.Component {
{Setting.getLabel(i18next.t("general:Name"), i18next.t("general:Name - Tooltip"))} : {Setting.getLabel(i18next.t("general:Name"), i18next.t("general:Name - Tooltip"))} :
</Col> </Col>
<Col span={22} > <Col span={22} >
<Input value={this.state.user.name} disabled={true} onChange={e => { <Input value={this.state.user.name} disabled={!Setting.isAdminUser(this.props.account)} onChange={e => {
this.updateUserField('name', e.target.value); this.updateUserField('name', e.target.value);
}} /> }} />
</Col> </Col>