44 lines
1.3 KiB
Go
44 lines
1.3 KiB
Go
package accountgroup
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"git.pcux.cn/xuans/Smail/models"
|
|
"git.pcux.cn/xuans/Smail/services/access"
|
|
_ "modernc.org/sqlite"
|
|
"xorm.io/xorm"
|
|
)
|
|
|
|
func TestCanAccessExcludesSuperAdminFromAdminScope(t *testing.T) {
|
|
engine, err := xorm.NewEngine("sqlite", ":memory:")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer engine.Close()
|
|
|
|
if err := engine.Sync2(new(models.User), new(models.AccountGroupMember)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
superAdmin := models.User{Account: "superadmin", Name: "超级管理员", Role: string(access.RoleSuperAdmin)}
|
|
admin := models.User{Account: "admin", Name: "分组管理员", Role: string(access.RoleAdmin), IsAdmin: 1}
|
|
member := models.User{Account: "member", Name: "普通用户", Role: string(access.RoleUser)}
|
|
if _, err := engine.Insert(&superAdmin, &admin, &member); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if _, err := engine.Insert(
|
|
&models.AccountGroupMember{UserID: admin.ID, GroupID: 1},
|
|
&models.AccountGroupMember{UserID: member.ID, GroupID: 1},
|
|
); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if CanAccess(engine, admin.ID, access.RoleAdmin, superAdmin.ID) {
|
|
t.Fatal("管理员不应访问超级管理员账户")
|
|
}
|
|
if !CanAccess(engine, admin.ID, access.RoleAdmin, member.ID) {
|
|
t.Fatal("管理员应访问同组普通用户账户")
|
|
}
|
|
}
|