Assiging first user system_admin role
Этот коммит содержится в:
13
api/user.go
13
api/user.go
@@ -167,6 +167,19 @@ func CreateUser(c *Context, team *model.Team, user *model.User) *model.User {
|
|||||||
if team.Email == user.Email {
|
if team.Email == user.Email {
|
||||||
user.Roles = model.ROLE_TEAM_ADMIN
|
user.Roles = model.ROLE_TEAM_ADMIN
|
||||||
channelRole = model.CHANNEL_ROLE_ADMIN
|
channelRole = model.CHANNEL_ROLE_ADMIN
|
||||||
|
|
||||||
|
// Below is a speical case where the first user in the entire
|
||||||
|
// system is granted the system_admin role instead of admin
|
||||||
|
if result := <-Srv.Store.User().GetTotalUsersCount(); result.Err != nil {
|
||||||
|
c.Err = result.Err
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
count := result.Data.(int64)
|
||||||
|
if count <= 0 {
|
||||||
|
user.Roles = model.ROLE_SYSTEM_ADMIN
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
user.Roles = ""
|
user.Roles = ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -481,3 +481,22 @@ func (us SqlUserStore) GetForExport(teamId string) StoreChannel {
|
|||||||
|
|
||||||
return storeChannel
|
return storeChannel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (us SqlUserStore) GetTotalUsersCount() StoreChannel {
|
||||||
|
storeChannel := make(StoreChannel)
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
result := StoreResult{}
|
||||||
|
|
||||||
|
if count, err := us.GetReplica().SelectInt("SELECT COUNT(Id) FROM Users"); err != nil {
|
||||||
|
result.Err = model.NewAppError("SqlUserStore.GetTotalUsersCount", "We could not count the users", err.Error())
|
||||||
|
} else {
|
||||||
|
result.Data = count
|
||||||
|
}
|
||||||
|
|
||||||
|
storeChannel <- result
|
||||||
|
close(storeChannel)
|
||||||
|
}()
|
||||||
|
|
||||||
|
return storeChannel
|
||||||
|
}
|
||||||
|
|||||||
@@ -206,6 +206,24 @@ func TestUserStoreGet(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUserCountt(t *testing.T) {
|
||||||
|
Setup()
|
||||||
|
|
||||||
|
u1 := model.User{}
|
||||||
|
u1.TeamId = model.NewId()
|
||||||
|
u1.Email = model.NewId()
|
||||||
|
Must(store.User().Save(&u1))
|
||||||
|
|
||||||
|
if result := <-store.User().GetTotalUsersCount(); result.Err != nil {
|
||||||
|
t.Fatal(result.Err)
|
||||||
|
} else {
|
||||||
|
count := result.Data.(int64)
|
||||||
|
if count <= 0 {
|
||||||
|
t.Fatal()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestUserStoreGetProfiles(t *testing.T) {
|
func TestUserStoreGetProfiles(t *testing.T) {
|
||||||
Setup()
|
Setup()
|
||||||
|
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ type UserStore interface {
|
|||||||
GetEtagForProfiles(teamId string) StoreChannel
|
GetEtagForProfiles(teamId string) StoreChannel
|
||||||
UpdateFailedPasswordAttempts(userId string, attempts int) StoreChannel
|
UpdateFailedPasswordAttempts(userId string, attempts int) StoreChannel
|
||||||
GetForExport(teamId string) StoreChannel
|
GetForExport(teamId string) StoreChannel
|
||||||
|
GetTotalUsersCount() StoreChannel
|
||||||
}
|
}
|
||||||
|
|
||||||
type SessionStore interface {
|
type SessionStore interface {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user