package models import "github.com/snail007/go-activerecord/mysql" type Privilege struct { } func (p *Privilege) GetTypedPrivileges(userId string, isDisplay string) (navigators, menus, controllers []map[string]string, err error) { db := G.DB() var rs *mysql.ResultSet if userId != "1" { roldIds := []string{} rs, err = db.Query(db.AR().Select("role_id").From("user_role").Where(map[string]interface{}{ "user_id": userId, "is_delete": 0, })) if err != nil { return } roldIds = rs.Values("role_id") privilegeIds := []string{} rs, err = db.Query(db.AR().Select("privilege_id").From("role_privilege").Where(map[string]interface{}{ "role_id": roldIds, "is_delete": 0, })) if err != nil { return } privilegeIds = rs.Values("privilege_id") rs, err = db.Query(db.AR().From("privilege").Where(map[string]interface{}{ "privilege_id": privilegeIds, }).OrderBy("parent_id", "ASC"). OrderBy("sequence", "ASC")) if err != nil { return } } else { rs, err = db.Query(db.AR().From("privilege").OrderBy("parent_id", "ASC").OrderBy("sequence", "ASC")) if err != nil { return } } navigators = []map[string]string{} menus = []map[string]string{} controllers = []map[string]string{} allPrivileges := rs.MapRows("privilege_id") for _, row := range rs.Rows() { if isDisplay != "-1" { if row["is_display"] != isDisplay { continue } } switch row["type"] { case "navigator": navigators = append(navigators, row) case "menu": row["parent"] = allPrivileges[row["parent_id"]]["name"] menus = append(menus, row) case "controller": row["parent"] = allPrivileges[row["parent_id"]]["name"] controllers = append(controllers, row) } } return } func (p *Privilege) GetPrivilegeByPrivilegeId(privilegeId string) (privilege map[string]string, err error) { db := G.DB() var rs *mysql.ResultSet rs, err = db.Query(db.AR().From("privilege").Where(map[string]interface{}{ "privilege_id": privilegeId, })) if err != nil { return } privilege = rs.Row() return } func (p *Privilege) HasSub(privilegeId string) (has bool, err error) { db := G.DB() var rs *mysql.ResultSet rs, err = db.Query(db.AR().From("privilege").Where(map[string]interface{}{ "parent_id": privilegeId, }).Limit(0, 1)) if err != nil { return } if rs.Len() > 0 { has = true } return } func (p *Privilege) Delete(privilegeId string) (err error) { db := G.DB() _, err = db.Exec(db.AR().Delete("privilege", map[string]interface{}{ "privilege_id": privilegeId, })) if err != nil { return } return } func (p *Privilege) Insert(privilege map[string]interface{}) (id int64, err error) { db := G.DB() var rs *mysql.ResultSet rs, err = db.Exec(db.AR().Insert("privilege", privilege)) if err != nil { return } id = rs.LastInsertId return } func (p *Privilege) Update(privilegeId string, privilege map[string]interface{}) (id int64, err error) { db := G.DB() var rs *mysql.ResultSet rs, err = db.Exec(db.AR().Update("privilege", privilege, map[string]interface{}{ "privilege_id": privilegeId, })) if err != nil { return } id = rs.LastInsertId return }