Files
nl_cms-api/internal/dao/role_methods.go
2025-07-29 12:45:07 +08:00

121 lines
2.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}