feat(admin): add comprehensive admin management system
- Add admin handlers and services for users, posts, comments, groups, and dashboard - Implement role permission management with ability to view and update permissions - Add database seeding for roles and Casbin permission policies - Upgrade Casbin from v2 to v3 with GORM adapter for persistent policy storage - Add admin-specific repository methods with filtering and pagination - Register new admin API routes under /api/v1/admin/*
This commit is contained in:
@@ -9,7 +9,7 @@ import (
|
||||
"carrot_bbs/internal/config"
|
||||
"carrot_bbs/internal/repository"
|
||||
|
||||
"github.com/casbin/casbin/v2"
|
||||
"github.com/casbin/casbin/v3"
|
||||
)
|
||||
|
||||
// CasbinService Casbin 权限服务接口
|
||||
@@ -43,6 +43,15 @@ type CasbinService interface {
|
||||
|
||||
// ClearCache 清除权限缓存
|
||||
ClearCache(ctx context.Context) error
|
||||
|
||||
// GetPermissionsForRole 获取角色的所有权限
|
||||
GetPermissionsForRole(ctx context.Context, role string) ([][]string, error)
|
||||
|
||||
// UpdatePermissionsForRole 更新角色的权限(先删除所有权限,再添加新权限)
|
||||
UpdatePermissionsForRole(ctx context.Context, role string, permissions [][]string) error
|
||||
|
||||
// GetAllPermissions 获取系统中所有权限定义
|
||||
GetAllPermissions(ctx context.Context) [][]string
|
||||
}
|
||||
|
||||
type casbinService struct {
|
||||
@@ -223,3 +232,34 @@ func (s *casbinService) clearUserCache(ctx context.Context, userID string) error
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *casbinService) GetPermissionsForRole(ctx context.Context, role string) ([][]string, error) {
|
||||
return s.enforcer.GetPermissionsForUser(role)
|
||||
}
|
||||
|
||||
func (s *casbinService) UpdatePermissionsForRole(ctx context.Context, role string, permissions [][]string) error {
|
||||
// 先删除该角色的所有权限
|
||||
_, err := s.enforcer.DeletePermissionsForUser(role)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 添加新权限
|
||||
for _, perm := range permissions {
|
||||
if len(perm) >= 2 {
|
||||
resource := perm[0]
|
||||
action := perm[1]
|
||||
if _, err := s.enforcer.AddPolicy(role, resource, action); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 清除缓存
|
||||
return s.ClearCache(ctx)
|
||||
}
|
||||
|
||||
func (s *casbinService) GetAllPermissions(ctx context.Context) [][]string {
|
||||
permissions, _ := s.enforcer.GetPolicy()
|
||||
return permissions
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user