AgentAccessPolicy.php 1.0 KB

1234567891011121314151617181920
  1. <?php
  2. declare(strict_types=1);
  3. namespace plugin\saiadmin\app\service\agent;
  4. use plugin\saiadmin\app\model\water\WaterOperatorRole;
  5. final class AgentAccessPolicy
  6. {
  7. public function grantedUserIds(): array {
  8. return WaterOperatorRole::query()->alias('ur')
  9. ->join('sa_system_role as r','r.id','=','ur.role_id')
  10. ->join('sa_system_role_menu as rm','rm.role_id','=','r.id')
  11. ->join('sa_system_menu as m','m.id','=','rm.menu_id')
  12. ->where('r.status',1)->whereNull('r.delete_time')->where('m.status',1)->whereNull('m.delete_time')
  13. ->where('m.slug','like','water:%')->distinct()->pluck('ur.user_id')->map(fn($id)=>(int)$id)->all();
  14. }
  15. public function state(array $row,array $grantedIds): string {
  16. if ((int)$row['status']!==1 || ($row['user_id'] && ($row['operator_status']===null || (int)$row['operator_status']!==1))) return 'disabled';
  17. return $row['user_id'] && in_array((int)$row['user_id'],$grantedIds,true) ? 'authorized' : 'pending';
  18. }
  19. }