- Fix tag filtering to correctly match Persian tags by adjusting JSON encoding in the applyTagFilter method. - Add new endpoint GET /api/v1/blogs/tags to retrieve distinct tag names and their counts for published posts, respecting city scope. - Update API documentation to reflect changes in tag filtering and the new tags endpoint. - Create BlogTagFilterTest to ensure correct functionality of tag filtering and facets, including edge cases for Persian tags and city filtering.
113 lines
5.8 KiB
YAML
113 lines
5.8 KiB
YAML
security:
|
|
password_hashers:
|
|
App\Auth\Entity\User:
|
|
algorithm: auto
|
|
Symfony\Component\Security\Core\User\InMemoryUser:
|
|
algorithm: bcrypt
|
|
|
|
providers:
|
|
app_user_provider:
|
|
entity:
|
|
class: App\Auth\Entity\User
|
|
property: mobileNumber
|
|
api_doc_provider:
|
|
memory:
|
|
users:
|
|
'%env(API_DOC_USERNAME)%':
|
|
password: '%env(API_DOC_PASSWORD)%'
|
|
roles: ['ROLE_ADMIN']
|
|
|
|
firewalls:
|
|
dev:
|
|
pattern: ^/(_profiler|_wdt|assets|build)/
|
|
security: false
|
|
|
|
health:
|
|
pattern: ^/health$
|
|
security: false
|
|
|
|
api_doc:
|
|
pattern: ^/api/doc
|
|
http_basic:
|
|
realm: "ClinicPro API Documentation"
|
|
provider: api_doc_provider
|
|
|
|
# اسلاتها روی firewall با jwt هستند (نه این firewallِ بیاحراز): همان اندپوینت
|
|
# هم برای سایت عمومی (بدون توکن → ناشناس، توسط access_control با PUBLIC_ACCESS
|
|
# مجاز) و هم برای پنل مدیریت (توکن معتبر → احراز میشود تا management=1 کار کند)
|
|
# سرویس میدهد. برای همین از الگوی زیر خارج شدهاند.
|
|
public_endpoints:
|
|
pattern: ^/(api/v1/altcha/(challenge|config)$|api/v1/user/(send-code|verify-code|register|otp-login|reset-password)|oauth/token$|session/token|api/v1/categorys/|api/v1/doctors$|api/v1/clinics$|api/v1/clinic/doctor-list/|api/v1/clinic/[^/]+/addresses$|api/v1/clinic-pro/doctor-addresses/|api/v1/appointment-booking-services/|api/v1/comments/|api/v1/rate/[^/]+$|api/v1/specialties|api/v1/blogs(/tags)?$|api/v1/tags$|api/v1/clinic-invitation/|api/v1/pre-registration$|api/v1/doctor/[^/]+/claim-info$)
|
|
stateless: true
|
|
security: false
|
|
|
|
payment_callback:
|
|
pattern: ^/api/v1/(payment/(callback|pay|order)/|subscription-payment/callback/)
|
|
stateless: true
|
|
security: false
|
|
|
|
api:
|
|
pattern: ^/(api|oauth|file/upload)/
|
|
stateless: true
|
|
provider: app_user_provider
|
|
custom_authenticators:
|
|
- App\Auth\Security\PasswordAuthenticator
|
|
jwt: ~
|
|
|
|
access_control:
|
|
- { path: ^/health$, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/doc, roles: ROLE_ADMIN }
|
|
- { path: ^/api/v1/user/send-code, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/user/verify-code, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/user/register, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/user/login, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/user/otp-login, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/user/reset-password, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/appointment-slots, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/appointment-service-slots, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/appointment-booking-services/, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/appointment-booking-locations/, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/appointment-settings/month-availability/, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/comments/, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/site-context$, methods: [GET], roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/specialties, methods: [GET], roles: PUBLIC_ACCESS }
|
|
- path: '^/api/v1/rate/[^/]+$'
|
|
methods: [GET]
|
|
roles: PUBLIC_ACCESS
|
|
- { path: ^/api/v1/blogs$, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/blogs/tags$, methods: [GET], roles: PUBLIC_ACCESS }
|
|
- path: '^/api/v1/blog/[^/]+$'
|
|
methods: [GET]
|
|
roles: PUBLIC_ACCESS
|
|
- { path: ^/oauth/token$, roles: PUBLIC_ACCESS }
|
|
- { path: ^/oauth/token/refresh$, roles: PUBLIC_ACCESS }
|
|
- { path: ^/session/token, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/payment/callback/, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/payment/pay/, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/payment/order/, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/subscription-payment/callback/, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/categorys/, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/doctors$, roles: PUBLIC_ACCESS }
|
|
- path: '^/api/v1/doctor/[^/]+$'
|
|
methods: [GET]
|
|
roles: PUBLIC_ACCESS
|
|
- { path: ^/api/v1/clinic/doctor-list/, roles: PUBLIC_ACCESS }
|
|
- { path: '^/api/v1/clinic/[^/]+/addresses$', roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/clinic-pro/doctor-addresses/, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/clinics$, roles: PUBLIC_ACCESS }
|
|
- path: '^/api/v1/clinic/[^/]+$'
|
|
methods: [GET]
|
|
roles: PUBLIC_ACCESS
|
|
- { path: ^/api/v1/clinic-invitation/, roles: PUBLIC_ACCESS }
|
|
- { path: ^/api/v1/user/\d+$, methods: [DELETE], roles: ROLE_ADMIN }
|
|
- { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
|
|
- { path: ^/oauth/userinfo, roles: IS_AUTHENTICATED_FULLY }
|
|
- { path: ^/oauth/logout, roles: IS_AUTHENTICATED_FULLY }
|
|
|
|
when@test:
|
|
security:
|
|
password_hashers:
|
|
App\Auth\Entity\User:
|
|
algorithm: auto
|
|
cost: 4
|