package dao import ( "context" "cms-api/internal/model" ) // GetById 根据ID获取角色 func (dao *RoleDao) GetById(ctx context.Context, id int) (*model.Role, error) { var role *model.Role err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Scan(&role) if err != nil { return nil, err } return role, nil } // List 获取角色列表 func (dao *RoleDao) List(ctx context.Context, req *model.RoleListRequest) ([]*model.Role, int, error) { var ( roles []*model.Role total int db = dao.Ctx(ctx) ) // 添加查询条件 if req.Status >= 0 { db = db.Where(dao.Columns().Status, req.Status) } if req.Keyword != "" { db = db.Where(dao.Columns().Name+" LIKE ? OR "+dao.Columns().Description+" LIKE ?", "%"+req.Keyword+"%", "%"+req.Keyword+"%") } // 获取总数 count, err := db.Count() if err != nil { return nil, 0, err } total = count // 分页查询 offset := (req.Page - 1) * req.PageSize err = db.Order(dao.Columns().CreatedAt + " DESC"). Limit(req.PageSize). Offset(offset). Scan(&roles) if err != nil { return nil, 0, err } return roles, total, nil } // GetAll 获取所有角色 func (dao *RoleDao) GetAll(ctx context.Context) ([]*model.Role, error) { var roles []*model.Role err := dao.Ctx(ctx).Where(dao.Columns().Status, 1).Order(dao.Columns().CreatedAt + " ASC").Scan(&roles) if err != nil { return nil, err } return roles, nil } // GetByName 根据名称获取角色 func (dao *RoleDao) GetByName(ctx context.Context, name string) (*model.Role, error) { var role *model.Role err := dao.Ctx(ctx).Where(dao.Columns().Name, name).Scan(&role) if err != nil { return nil, err } return role, nil } // Create 创建角色 func (dao *RoleDao) Create(ctx context.Context, role *model.Role) (int64, error) { result, err := dao.Ctx(ctx).Data(role).Insert() if err != nil { return 0, err } id, err := result.LastInsertId() if err != nil { return 0, err } return id, nil } // Update 更新角色 func (dao *RoleDao) Update(ctx context.Context, id int, data interface{}) error { _, err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Data(data).Update() return err } // Delete 删除角色 func (dao *RoleDao) Delete(ctx context.Context, id int) error { _, err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Delete() return err } // UpdateStatus 更新角色状态 func (dao *RoleDao) UpdateStatus(ctx context.Context, id int, status int) error { _, err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Data(map[string]interface{}{ dao.Columns().Status: status, }).Update() return err } // CheckPermission 检查权限 func (dao *RoleDao) CheckPermission(ctx context.Context, roleId int, permission string) (bool, error) { var role *model.Role err := dao.Ctx(ctx).Where(dao.Columns().Id, roleId).Scan(&role) if err != nil { return false, err } if role == nil { return false, nil } // 这里应该实现权限检查逻辑 // 暂时返回true,实际项目中需要根据role.Permissions字段进行权限验证 return true, nil }