/** * Add a user to an existing role. This will insert the added role into the users active RoleSet * instance upon successful insertion into the database * * @param Role $role Existing role to be added to * @param \RBAC\Subject\SubjectInterface $subject Initialized subject instance * @return bool Database execution success status */ public function roleAddSubject(Role $role, SubjectInterface $subject) { if ($this->roleAddSubjectId($role, $subject->id())) { $users_role_set = $subject->getRoleSet(); $users_role_set->addRole($role); $subject->loadRoleSet($users_role_set); return true; } else { return false; } }
/** * @param SubjectInterface $subject * * @return Role|\RBAC\Role\Role[] */ public function roleFetchSubjectRoles(SubjectInterface $subject) { $query = "\n SELECT\n role_id\n FROM\n auth_subject_role\n WHERE\n subject_id = :subject_id\n "; $roles = []; $cur = $this->db->prepare($query); $cur->bindValue(":subject_id", $subject->id(), PDO::PARAM_INT); try { $cur->execute(); $res = $cur->fetchAll(PDO::FETCH_OBJ); if (!$res) { return []; } else { $role_ids = array_map(function ($row) { return $row->role_id; }, $res); $roles = $this->roleFetchById($role_ids); } } catch (PDOException $db_err) { if ($this->logger) { $this->logger->error("Failed to fetch roles for subject", ['exception' => $db_err]); } } return $roles; }