fixed multiple roles in 1 policy

This commit is contained in:
2025-12-15 13:24:16 +08:00
parent 5743dbf22d
commit 15deba4584
6 changed files with 79 additions and 84 deletions
+13 -20
View File
@@ -1,21 +1,14 @@
package repository
import (
"authorization/db"
"authorization/models"
"database/sql"
"fmt"
)
type PermissionRepository struct {
db *sql.DB
}
func NewPermissionRepository(db *sql.DB) *PermissionRepository {
return &PermissionRepository{db: db}
}
// GetPermissionByResourceAndAction finds a permission by resource and action
func (r *PermissionRepository) GetPermissionByResourceAndAction(resource, action string) (*models.Permission, error) {
func GetPermissionByResourceAndAction(resource, action string) (*models.Permission, error) {
query := `
SELECT id, permission_name, description, resource, action
FROM permissions
@@ -24,7 +17,7 @@ func (r *PermissionRepository) GetPermissionByResourceAndAction(resource, action
`
var perm models.Permission
err := r.db.QueryRow(query, resource, action).Scan(
err := db.DB.QueryRow(query, resource, action).Scan(
&perm.ID,
&perm.PermissionName,
&perm.Description,
@@ -43,14 +36,14 @@ func (r *PermissionRepository) GetPermissionByResourceAndAction(resource, action
}
// GetPolicyAttributesByPermission retrieves all policy attributes for a permission
func (r *PermissionRepository) GetPolicyAttributesByPermission(permissionID int) ([]models.PolicyAttribute, error) {
func GetPolicyAttributesByPermission(permissionID int) ([]models.PolicyAttribute, error) {
query := `
SELECT id, attribute_name, attribute_type, comparison, attribute_value, permission_id
FROM policy_attributes
WHERE permission_id = ?
`
rows, err := r.db.Query(query, permissionID)
rows, err := db.DB.Query(query, permissionID)
if err != nil {
return nil, fmt.Errorf("error querying policy attributes: %w", err)
}
@@ -77,14 +70,14 @@ func (r *PermissionRepository) GetPolicyAttributesByPermission(permissionID int)
}
// GetUserAttributes retrieves all attributes for a user
func (r *PermissionRepository) GetUserAttributes(userID string) (map[string]string, error) {
func GetUserAttributes(userID string) (map[string]string, error) {
query := `
SELECT attribute_name, attribute_value
FROM user_attributes
WHERE user_id = ?
`
rows, err := r.db.Query(query, userID)
rows, err := db.DB.Query(query, userID)
if err != nil {
return nil, fmt.Errorf("error querying user attributes: %w", err)
}
@@ -104,7 +97,7 @@ func (r *PermissionRepository) GetUserAttributes(userID string) (map[string]stri
}
// GetUserByID retrieves user details
func (r *PermissionRepository) GetUserByID(userID string) (*models.User, error) {
func GetUserByID(userID string) (*models.User, error) {
query := `
SELECT user_id, first_name, middle_name, last_name, suffix, email_address,
account_type, emp_id, reg, prov, aProv, mun, bgy, is_logged_in,
@@ -116,7 +109,7 @@ func (r *PermissionRepository) GetUserByID(userID string) (*models.User, error)
`
var user models.User
err := r.db.QueryRow(query, userID).Scan(
err := db.DB.QueryRow(query, userID).Scan(
&user.UserID,
&user.FirstName,
&user.MiddleName,
@@ -155,14 +148,14 @@ func (r *PermissionRepository) GetUserByID(userID string) (*models.User, error)
}
// GetAllPermissions retrieves all permissions (for caching)
func (r *PermissionRepository) GetAllPermissions() ([]models.Permission, error) {
func GetAllPermissions() ([]models.Permission, error) {
query := `
SELECT id, permission_name, description, resource, action
FROM permissions
ORDER BY id
`
rows, err := r.db.Query(query)
rows, err := db.DB.Query(query)
if err != nil {
return nil, fmt.Errorf("error querying all permissions: %w", err)
}
@@ -188,14 +181,14 @@ func (r *PermissionRepository) GetAllPermissions() ([]models.Permission, error)
}
// GetAllPolicyAttributes retrieves all policy attributes (for caching)
func (r *PermissionRepository) GetAllPolicyAttributes() (map[int][]models.PolicyAttribute, error) {
func GetAllPolicyAttributes() (map[int][]models.PolicyAttribute, error) {
query := `
SELECT id, attribute_name, attribute_type, comparison, attribute_value, permission_id
FROM policy_attributes
ORDER BY permission_id, id
`
rows, err := r.db.Query(query)
rows, err := db.DB.Query(query)
if err != nil {
return nil, fmt.Errorf("error querying all policy attributes: %w", err)
}